声明
- 本文是整理全网的内容,总结出来的一篇个人实践可以实现想要的功能的总结性文章,所以可以在多个地方看到差不多一样的内容,但是,有一些是少了一两个步骤的
实现环境
- Python 3.7
- Django 3.0.10
- MySQL 5.7
准备
-
安装需要的包
pip3 install django-haystack pip3 install whoosh pip3 install jieba
-
在setting.py中配置
#注册app INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', #haystack要放在应用的上面 'haystack', 'myapp', #这个jsapp是自己创建的app ] #配置haystack HAYSTACK_CONNECTIONS = { 'default': { #指定whoosh引擎 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', #'ENGINE': 'myapp.whoosh_cn_backend.WhooshEngine', #whoosh_cn_backend是haystack的whoosh_backend.py改名的文件为了使用jieba分词 #索引文件路径 'PATH': os.path.join(BASE_DIR, 'whoosh_index'), } } #添全文检索框架配置加此项,当数据库改变时,会自动更新索引,非常方便 HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
索引文件生成
-
在子应用下创建索引文件
- 在子应用的目录下,创建一个名为 myapp/search_indexes.py 的文件,并写入
from haystack import indexes from .models import Project # 修改此处,类名为模型类的名称+Index,比如模型类为GoodsInfo,则这里类名为GoodsInfoIndex(其实可以随便写) class ProjectIndex(indexes.SearchIndex, indexes.Indexable): # text为索引字段 # document = True,这代表haystack和搜索引擎将使用此字段的内容作为索引进行检索 # use_template=True 指定根据表中的那些字段建立索引文件的说明放在一个文件中 text = indexes.CharField(document=True, use_template=True) # 对那张表进行查询 def get_model(self):
- 在子应用的目录下,创建一个名为 myapp/search_indexes.py 的文件,并写入