Django搭建的网站如何实现全站搜索

Zong
  • 143

问题:网站后台采用django框架搭建,现在想要做一个全站搜索的功能,请教一下有什么好的解决方案吗?

网上搜了一下,比如:haystack,sphinx都是全文索引的资料,并不是我想要的。

想要实现的功能:

比如网站有A,B,C,D,E这几个模型,搜索“keywords”,可以把5个模型中标题包含“keywords”的返回就行了。
参考:马蜂窝网站的搜索功能

回复
阅读 3.8k
4 个回答
✓ 已被采纳

这几个表(模型)是不是有很多相同的字段、属性? 否则,一般不太可能有业务场景需要同时检索。
如果是,那么可以把所有 共有的字段 提出来,放到一个 base表(模型)里,然后A B C D E分别继承base。

我最近在研究Elasticsearch。
可以新建一个叫做model的索引。存id,title,url三个字段。可能还需要一个中文分词插件。
使用restapi或者elasticsearch的python sdk交互。

新建model的索引可以详细点吗?

可以直接用request获取搜索的关键词,然后进行数据库查询,用fliter方法进行过滤,注意这个方法里要写成对应的信息__icontains=获取到的关键词,加i是不区分大小写。例如你要搜索的东西是要在name字段中检索,就在filter方法里面写成name_icontains=关键词 的形式,Django的model会自动识别这种写法然后帮你进行查询,这里给段代码吧

`

    search_keywords = request.GET.get('keywords','')
    if search_keywords:
        information = all_information.filter(Q(name__icontains=search_keywords)|Q(desc__icontains=search_keywords)|Q(detail__icontains=search_keywords))`
        

这里的Q就是或的意思,这是djang自带的库里面的。
如果你是用的elasticsearch就去读相关的文档。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏