一个Django项目配置多个Haystack全文检索系统

关于Haystack的介绍和安装,网上有许多资料。这里主要介绍如何在同一个Django下配置多个Haystack。
本文介绍的是Elasticsearch搜索引擎。
(whoosh请参考:https://blog.csdn.net/weixin_39990025/article/details/82810349)

这是settings的配置(配置一个Haystack)
一个Django项目配置多个Haystack全文检索系统_第1张图片

如果你想使用一个Haystack全文检索系统过滤多个模型,请参考:https://blog.csdn.net/weixin_44735134/article/details/93210499

这里演示一下:
对模型一的搜索
一个Django项目配置多个Haystack全文检索系统_第2张图片
对模型二的搜索
一个Django项目配置多个Haystack全文检索系统_第3张图片

但是这样做可能出现如下的弊端:

首先,展示一下全部资源,可以看到‘趋之若鹜’这个资源
一个Django项目配置多个Haystack全文检索系统_第4张图片
搜索一下‘’,发现并没有这个资源
一个Django项目配置多个Haystack全文检索系统_第5张图片
原因:同一个Haystack下,模型二的索引覆盖了模型一的索引,也就是模型二有多少资源就会覆盖模型一多少资源,这里模型二只有一个资源(如下图),刚好覆盖了模型一的第一个资源(‘趋之若鹜’),所以找不到。
一个Django项目配置多个Haystack全文检索系统_第6张图片
而且还有一个不足之处,就是搜索速度相比原来慢了一点(不知道是不是自己的原因)。

解决方法

接下来,进入主题。
对于上面的问题可以通过配置多个Haystack解决。

1、settings
一个Django项目配置多个Haystack全文检索系统_第7张图片
2、views

模型一(因为这里用的是default,因此可以不用配置view,若要配置,操作如下)

from haystack.query import SearchQuerySet
sqs = SearchQuerySet().using('default')

一个Django项目配置多个Haystack全文检索系统_第8张图片
模型二

from haystack.query import SearchQuerySet
sqs = SearchQuerySet().using('video_allres')

一个Django项目配置多个Haystack全文检索系统_第9张图片

最后记得rebuild_index

最终效果

一个Django项目配置多个Haystack全文检索系统_第10张图片
然后,分别在‘全部资源’、‘视频资源’这两个页面搜索‘中’
一个Django项目配置多个Haystack全文检索系统_第11张图片
一个Django项目配置多个Haystack全文检索系统_第12张图片
搞定,这样子,既配置多个Haystack全文检索系统,又实现了多个模型分离查询(查询模型一不会查到模型二的资源),速度还很快。

你可能感兴趣的:(python)