1

我已经搜索了大量关于全文搜索的问题,但我找不到解决这个问题的方法。

我的命令如下:

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

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

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

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

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

'this'、'apple' 和 'chicken' 都在数据库中,所有三个查询都应该返回非空结果。

我认为当有一个停用词输入数据库时​​会自动返回任何内容。

4

2 回答 2

1

我认为问题在于“this”是一个停用词,并且在“this”周围包含 + 和 *。

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

您可以尝试:keyStr == '+apple* this*'或插入一条带有 'thisorthat 的记录

于 2013-02-23T02:48:54.457 回答
0

不太可能。Boolean Full-Text Search Documentation明确指出它不会被视为停用词:

如果使用截断运算符指定单词,则不会从布尔查询中删除它,即使它太短(由 ft_min_word_len 设置确定)或停用词。出现这种情况是因为单词不是太短或停用词,而是作为前缀,必须以以前缀开头的单词的形式出现在文档中。

于 2013-02-23T02:33:51.423 回答