全文检索框架Haystack,与 Whoosh搜索引擎的配置
Haystack和Whoosh环境配置
1. 安装Django项目下使用的django-haystack包, 以及搜索引擎whoosh包
pip install django-haystack pip install whoosh
# 安装django-haystack时要求django框架为较新版, 会自动更新Django框架. 应注意Django框架版本, 如对版本有要求, 应安装对应的django-haystack包.
# 如安装后运行项目出现错误代码:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required;
请参照: Django2.X 与 pymysql兼容
2. Django项目文件中, settings添加haystack配置,注册haystack应用
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ... 'haystack', ... ) # 全文检索框架的配置(haystack) HAYSTACK_CONNECTIONS = { 'default': { # 选择引擎(haystock包内的backend后端文件夹选中whoosh的相关配置文件的Engine函数) 'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', # 索引文件放置路径 'PATH': os.path.join(BASE_DIR, 'whoosh_index'), } } # 设置即时生成索引(haystock包下,signal(标识)索引文件生成时间为,即时生成) HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
3. 应用下创建.py文件, 名称为search_indexes.py
# 引入haystack模块中的indexes函数 from haystack import indexes # 引入需要建立索引的模型类 from goods.models import GoodsSKU # 指定对于 具体类 下的 具体属性 建立索引 # 通常索引类名格式: 模型类名 + Index class GoodsSKUIndex(indexes.SearchIndex, indexes.Indexable): '''索引类, 继承与indexes的SearchIndex和Indexable类''' # 定义text值 # 其中,索引字段 use_template=True, 使用模板文件配置.(从固定路径调用模板文件) text = indexes.CharField(document=True,use_template=True) # 获取模型类 def get_model(self): # 返回模型类 return GoodsSKU # 获得所需要建立索引的数据 def index_queryset(self, using=None): return self.get_model().object.all() # 查询该模型类下所有数据
4. 配置需要索引的模型类, 以及相关索引内容
新建目录和文件,固定路径为:
项目根目录/templates/search/indexes/应用名/模型类名(全小写)_text.txt
例, 项目文件为project, 应用名application, 模型类名为DataInfo, 则创建模板txt文件路径为
project/templates/search/indexes/application/datainfo_text.txt
并在该文件键入 模型类内需要建立索引的属性:
{{ object.属性名 }} {{ object.外键.属性名 }} 例: {{ object.name }} {{ object.detail }} {{ object.foreign.name }} {{ object.foreign.detail }}
5. 生成索引
运行django项目管理manage.py
python manage.py rebuild_index
y确定即可
###############################################
关于django.settings中,haystack设置项:
# 数据发生更改的时候自动重新生成索引
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
# 设置返回的分页内每页的项目个数.
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 5