2013-02-23 93 views
1

我已经搜索了大量全文搜索的问题,并找不到解决此问题的方法。停止词的全文布尔搜索返回空结果

我的命令如下:

SELECT * FROM t1 WHERE MATCH (c1,c2,c3) AGAINST (:keyStr IN BOOLEAN MODE)

如果:keyStr == '+苹果*' 我得到的值返回。

如果:keyStr =='+ this *'我什么也没得到。

if:keyStr =='+ apple * + this *'我什么也没得到。

如果:keyStr =='+ apple * + chicken *'我得到返回的值。

'这','苹果'和'鸡'都在数据库中,所有三个查询都应返回非空结果。

我觉得当有一个停用词输入数据库时​​会自动返回什么。

回答

0

这是不可能的。 Boolean Full-Text Search Documentation明确指出,它不会被视为禁用词:如果与运营商截断指定一个字

,它不是从布尔查询剥离,哪怕是过短(从确定ft_min_word_len设置)或者停用词。出现这种情况的原因是该词不是太短或是停用词,而是作为前缀,必须以文字形式以前缀开头的形式出现。

+0

笑我怎么能显示其实际发生的记录? 我删除了所有单词中的'*',现在: '+ apple + this'returns values but'+ this'returns null – 2013-02-23 02:37:43

+0

@JoseCalderon您是否改变了配置中的任何内容? – Tchoupi 2013-02-23 02:40:42

+0

nope。我认为当:keyStr ='+ this'时,mysql会忽略'+ this',并对空字符串进行全文搜索,空字符串返回null。 – 2013-02-23 02:42:46

1

我认为问题在于'this'是一个停止词,并在'this'周围包含+和*。

原因是:keyStr == '+apple* +this*'需要苹果*和这个*。但由于唯一匹配'this *'的是停用词,因此您看不到结果。

你可以尝试:keyStr == '+apple* this*'或插入有“thisorthat

相关问题