当我查询我的数据库时,以下两个查询返回相同的(预期的)结果:
SELECT * FROM articles
WHERE content LIKE '%Euskaldunak%'
SELECT * FROM articles
WHERE MATCH (content) AGAINST ('+"Euskaldunak"' IN BOOLEAN MODE)它正在搜索的内容字段中的文本如下所示:"...These Euskaldunak,or newcomers...“
但是,以下对同一个表的查询返回预期的单个结果:
SELECT * FROM articles
WHERE content LIKE '%PCC%'下面的查询返回一个空结果:
SELECT * FROM articles
WHERE MATCH (content) AGAINST ('+"PCC"' IN BOOLEAN MODE)与此结果匹配的内容字段中的文本如下所示:"...Portland社区大学是最大的……“
我不明白为什么搜索"Euskaldunak“可以用这种MATCH...AGAINST语法,而"PCC”却不能。
(另外:"PCC“不是该字段中的常见短语-没有其他行包含该词,因此自然语言搜索不应将其排除在外。)
发布于 2010-11-02 03:00:47
您的全文最小字长可能设置得太高。我认为默认值是4,这将解释您所看到的内容。如果您希望索引所有单词而不考虑长度,则将其设置为1。
运行以下查询:
show variables like 'ft_min_word_len';如果该值大于3,并且您希望在短于该值的单词上获得匹配结果,请编辑/etc/my.cnf,并使用适合您的应用程序的值在mysqld部分中添加或更新此行:
ft_min_word_len = 1然后重新启动MySQL并重新构建全文索引,您应该已经做好了准备。
发布于 2010-11-02 02:02:07
我马上就能想到两件事。第一个问题是您的ft_min_word_len值设置为超过3个字符。任何小于ft_min_word_len长度的“单词”都不会被索引。
第二,超过50%的记录包含'PCC‘字符串。匹配超过50%的记录的全文搜索被认为是不相关的,并且不返回任何内容。
全文索引与常规字符串索引具有不同的规则。例如,有一个停用词列表,因此某些常见的单词,如to,the,和,不会被索引。
https://stackoverflow.com/questions/4071408
复制相似问题