首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL MATCH...AGAINST有时能找到答案,有时又找不到

MySQL MATCH...AGAINST有时能找到答案,有时又找不到
EN

Stack Overflow用户
提问于 2010-11-02 01:30:44
回答 2查看 1.4K关注 0票数 2

当我查询我的数据库时,以下两个查询返回相同的(预期的)结果:

代码语言:javascript
复制
SELECT * FROM articles 
 WHERE content LIKE '%Euskaldunak%'

SELECT * FROM articles 
 WHERE MATCH (content) AGAINST ('+"Euskaldunak"' IN BOOLEAN MODE)

它正在搜索的内容字段中的文本如下所示:"...These Euskaldunak,or newcomers...“

但是,以下对同一个表的查询返回预期的单个结果:

代码语言:javascript
复制
SELECT * FROM articles 
 WHERE content LIKE '%PCC%'

下面的查询返回一个空结果:

代码语言:javascript
复制
SELECT * FROM articles 
 WHERE MATCH (content) AGAINST ('+"PCC"' IN BOOLEAN MODE)

与此结果匹配的内容字段中的文本如下所示:"...Portland社区大学是最大的……“

我不明白为什么搜索"Euskaldunak“可以用这种MATCH...AGAINST语法,而"PCC”却不能。

(另外:"PCC“不是该字段中的常见短语-没有其他行包含该词,因此自然语言搜索不应将其排除在外。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-02 03:00:47

您的全文最小字长可能设置得太高。我认为默认值是4,这将解释您所看到的内容。如果您希望索引所有单词而不考虑长度,则将其设置为1。

运行以下查询:

代码语言:javascript
复制
show variables like 'ft_min_word_len';

如果该值大于3,并且您希望在短于该值的单词上获得匹配结果,请编辑/etc/my.cnf,并使用适合您的应用程序的值在mysqld部分中添加或更新此行:

代码语言:javascript
复制
ft_min_word_len = 1

然后重新启动MySQL并重新构建全文索引,您应该已经做好了准备。

票数 4
EN

Stack Overflow用户

发布于 2010-11-02 02:02:07

我马上就能想到两件事。第一个问题是您的ft_min_word_len值设置为超过3个字符。任何小于ft_min_word_len长度的“单词”都不会被索引。

第二,超过50%的记录包含'PCC‘字符串。匹配超过50%的记录的全文搜索被认为是不相关的,并且不返回任何内容。

全文索引与常规字符串索引具有不同的规则。例如,有一个停用词列表,因此某些常见的单词,如to,the,和,不会被索引。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4071408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档