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