关于Haystack的介绍和安装,网上有许多资料。这里主要介绍如何在同一个Django下配置多个Haystack。
本文介绍的是Elasticsearch搜索引擎。
(whoosh请参考:https://blog.csdn.net/weixin_39990025/article/details/82810349)
这是settings的配置(配置一个Haystack)
如果你想使用一个Haystack全文检索系统过滤多个模型,请参考:https://blog.csdn.net/weixin_44735134/article/details/93210499
这里演示一下:
对模型一的搜索
对模型二的搜索
但是这样做可能出现如下的弊端:
首先,展示一下全部资源,可以看到‘趋之若鹜’这个资源
搜索一下‘趋’,发现并没有这个资源
原因:同一个Haystack下,模型二的索引覆盖了模型一的索引,也就是模型二有多少资源就会覆盖模型一多少资源,这里模型二只有一个资源(如下图),刚好覆盖了模型一的第一个资源(‘趋之若鹜’),所以找不到。
而且还有一个不足之处,就是搜索速度相比原来慢了一点(不知道是不是自己的原因)。
解决方法
接下来,进入主题。
对于上面的问题可以通过配置多个Haystack解决。
1、settings
2、views
模型一(因为这里用的是default,因此可以不用配置view,若要配置,操作如下)
from haystack.query import SearchQuerySet
sqs = SearchQuerySet().using('default')
模型二
from haystack.query import SearchQuerySet
sqs = SearchQuerySet().using('video_allres')
最后记得rebuild_index
最终效果
然后,分别在‘全部资源’、‘视频资源’这两个页面搜索‘中’
搞定,这样子,既配置多个Haystack全文检索系统,又实现了多个模型分离查询(查询模型一不会查到模型二的资源),速度还很快。