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

关于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全文检索系统,又实现了多个模型分离查询(查询模型一不会查到模型二的资源),速度还很快。

猜你喜欢

转载自blog.csdn.net/qq_35526165/article/details/99330699