关于Haystack和whoosh以及jieba的配置就不赘述了,本文介绍的是whoosh搜索引擎。
在原有一个haystack全文检索的基础之上,开始配置第二个,琢磨了一下午。
先把相应的配置文件都复制一份
到settings文件里修改索引路径
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'essay.whoosh_cn_backend.WhooshEngine',
'PATH': os.path.join(BASE_DIR, 'whoosh_index'),
'EXCLUDED_INDEXES': ['video.search_indexes.VideoIndex'],
},
'video_search': {
'ENGINE': 'video.whoosh_cn_backend.WhooshEngine',
'PATH': os.path.join(BASE_DIR, 'whoosh_index_1'),
'EXCLUDED_INDEXES': ['essay.search_indexes.EssayIndex'],
},
}
修改search_indexes.py
原本的'essay' app使用的是默认的:‘default’,所以需要修改一下‘video’ app 里的search_indexes.py文件,不然查询的时候也会通过‘default’来调用查找
接下来修改haystack\urls.py
# encoding: utf-8
from __future__ import absolute_import, division, print_function, unicode_literals
from django.conf.urls import url
from haystack.views import *
urlpatterns = [
url(r'^$', SearchView(), name='haystack_search'),
#添加一行路径
url(r'^video/$', VideoSearchView(), name='haystack_search_1'),
]
再修改haystack\views.py
把SearchView类里的get_results方法修改一下(原理就是在迭代的时候判断一下模型的类型并保存返回)
def get_results(self):
res_list = []
for search_obj in self.form.search():
if search_obj.model_name == 'essay':
res_list.append(search_obj)
return res_list
"""
Fetches the results via the form.
Returns an empty list if there's no query to search with.
"""
# return self.form.search()
再把VideoSearchView类修改一下
修改VideoSearchView的__init__方法
同样地把VideoSearchView类里的get_results方法修改一下
def get_results(self):
res_list = []
for search_obj in self.form.search():
if search_obj.model_name == 'video':
res_list.append(search_obj)
return res_list
"""
Fetches the results via the form.
Returns an empty list if there's no query to search with.
"""
# return self.form.search()
最后再把html里的路径写正确就行了
参考文章:
https://blog.csdn.net/qq_35526165/article/details/99330699
https://blog.csdn.net/weixin_44735134/article/details/93210499
https://blog.csdn.net/weixin_39990025/article/details/82810349