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

2020-03-05 14:35:56 浏览数 (1)

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

第一个坑,中文不支持

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

第二个坑

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

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

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

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

看看分词器的结果:

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

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

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

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

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

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

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

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

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

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

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

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

0 人点赞