Django项目配置多个Haystack全文检索系统与模板

关于Haystack和whoosh以及jieba的配置就不赘述了,本文介绍的是whoosh搜索引擎。

在原有一个haystack全文检索的基础之上,开始配置第二个,琢磨了一下午。

先把相应的配置文件都复制一份

Django项目配置多个Haystack全文检索系统与模板_第1张图片

Django项目配置多个Haystack全文检索系统与模板_第2张图片

Django项目配置多个Haystack全文检索系统与模板_第3张图片

到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'],
    },
}

Django项目配置多个Haystack全文检索系统与模板_第4张图片

修改search_indexes.py
原本的'essay' app使用的是默认的:‘default’,所以需要修改一下‘video’ app 里的search_indexes.py文件,不然查询的时候也会通过‘default’来调用查找

Django项目配置多个Haystack全文检索系统与模板_第5张图片

接下来修改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类修改一下

Django项目配置多个Haystack全文检索系统与模板_第6张图片

修改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

 

你可能感兴趣的:(Python)