前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django+whoosh 全文检索中文分词问题

Django+whoosh 全文检索中文分词问题

作者头像
小贝壳
发布2020-03-05 14:35:56
8520
发布2020-03-05 14:35:56
举报
文章被收录于专栏:贝塔博客

django使用whoosh全文检索,到处都是坑。如果用java来写,那就方便多了。

第一个坑,中文不支持

只能自己改下源码。使用了jieba的中文分词

tnIkNxG3.png
tnIkNxG3.png
第二个坑

搜索关键词问题,假如索引中有以下数据:

  1. Java是世界上最好的语言
  2. Django是最好用的web框架,但是处处是坑

我们尝试着输入关键词搜索,例如:java、django这种单个关键词都可以准确的返回数据,

如我想用一句话来搜索:“java是哪个国家发明的语言呢”

看看分词器的结果:

IFdfyVTe.png
IFdfyVTe.png

所有1中 java、是、的、语言,这几个词都匹配,其中:是、的,是停用词,剩下的就是 java、国家、发明、语言这两个词

但是你会发现搜索不到结果,你用单个词就可以搜索到。

这是因为whoosh 内置使用的操作符是AND,也就是必须同时满足你分词后的词语。多一个都不行。

那如果这样的话全文检索是没有任何意义的。于是在官方文档找到了一句这样的配置:

代码语言:javascript
复制
HAYSTACK_DEFAULT_OPERATOR = 'OR'

settings.py中加入默认操作符配置。

配置好了之后,进行搜索还是不行,默认还是AND操作符。

调试分析,这会从settings.py中取到我们预设的操作符:

Q0l9wqHo.png
Q0l9wqHo.png

但是在构造查询的时候 还是使用的AND

hmSyEmtD.png
hmSyEmtD.png

实在不解设置了没效,那官方还说这样做有什么意义。在Google之后,很多人都有这样的问题。

大部分人的解决方案是自己重写view 然后构造自己的queryset

没办法,只能自己重写查询的部分了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一个坑,中文不支持
  • 第二个坑
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档