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

发布于 2022-09-06 01:56:47 字数 293 浏览 48 评论 0

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

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

想要实现的功能:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

极致的悲 2022-09-13 01:56:47

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

眸中客 2022-09-13 01:56:47

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

难理解 2022-09-13 01:56:47

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

爱的那么颓废 2022-09-13 01:56:47

可以直接用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就去读相关的文档。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文