我搜索了大量关于全文搜索的问题,我找不到解决这个问题的方法。
我的命令如下:
SELECT *
FROM t1
WHERE MATCH (c1,c2,c3) AGAINST (:keyStr IN BOOLEAN MODE)
如果:keyStr =='+ apple *'我会返回值。
如果:keyStr =='+ this *'我没有得到任何回复。
if:keyStr =='+ apple * + this *'我什么都没有回来。
如果:keyStr =='+ apple * + chicken *'我会返回值。
'this','apple'和'chicken'都在db中,所有三个查询都应返回非null结果。
我认为当输入一个停用词时,数据库会自动返回任何内容。
答案 0 :(得分:1)
我认为问题在于'这个'是一个禁用词,并且在'this'周围包含了+和*。
原因是:keyStr == '+apple* +this*'
需要apple *和this *。但是因为唯一匹配'this *'的是禁用词,所以你看不到结果。
您可以尝试:keyStr == '+apple* this*'
或使用'thisorthat
答案 1 :(得分:0)
不太可能。 Boolean Full-Text Search Documentation明确指出它不会被视为禁用词:
如果使用截断运算符指定了单词,则不会从布尔查询中删除它,即使它太短(根据ft_min_word_len设置确定)或停用词。之所以会出现这种情况,是因为该单词不会被视为太短或停用词,而是作为前缀必须以单词形式出现在文档中,该单词以前缀开头。