MySQL fulltextsearch:没有结果

时间:2013-01-25 09:50:01

标签: mysql full-text-search

我在我的表中使用此查询进行全文搜索:

SELECT Titel FROM cmsa WHERE MATCH(Titel) AGAINST ('+"Ort" +"Berlin"' IN BOOLEAN MODE)

但结果是空的。

如果我使用

SELECT Titel FROM cmsa WHERE Titel LIKE '%Berlin%'

结果将是(没有引号):

"Ort - Berlin"

为什么fulltextsearch没有找到这个结果。 “Ort”和“Berlin”这两个词都在条目的标题栏中。

其他全文搜索效果很好。

任何想法?

3 个答案:

答案 0 :(得分:2)

尝试不使用双引号并确保Mysql引擎为MYISAM

SELECT 
         Titel 
FROM 
         cmsa 
WHERE 
         MATCH(Titel) AGAINST ('+Ort +Berlin' IN BOOLEAN MODE)

一些解释

布尔模式搜索

SELECT headline, story FROM news
WHERE MATCH (headline,story)
AGAINST ('+Hurricane -Katrina' IN BOOLEAN MODE);

上述声明将与有关飓风的新闻报道相匹配,但不会提及那些提及卡特里娜飓风的报道。

查询扩展程序

盲查询扩展(或自动相关反馈)功能可用于扩展搜索结果。这往往包含更多的噪音,并使搜索非常模糊。

在大多数情况下,如果用户查询返回了一些结果,您将使用此操作,再次尝试使用QUERY EXPANSION,它将添加通常在查询中找到的单词。

SELECT headline, story FROM news
WHERE MATCH (headline,story)
AGAINST ('Katrina' WITH QUERY EXPANSION);

上述查询可能会返回有关飓风的所有新闻报道,而不仅仅是包含卡特里娜飓风的新闻报道。

有关MySQL中全文搜索的几点意见:

  • 搜索不区分大小写
  • 忽略短字,默认最小长度为4个字符。您可以使用变量ft_min_word_len和ft_max_word_len更改最小和最大字长

  • 忽略称为停用词的词,您可以指定自己的停用词,但默认词包括,有,有些 - 请参阅默认值 停用词列表。

  • 您可以通过将变量ft_stopword_file设置为空字符串来禁用停用词。
  • 只有MyISAM存储引擎支持全文搜索。
  • 如果超过50%的行中存在单词,则其权重为零。这在大型数据集上具有优势,但可以做到 对小的测试很困难。

答案 1 :(得分:2)

我想这是因为MySQL有一个服务器参数 - The minimum length of the word to be included in a FULLTEXT index。此参数的默认值为4,因此您的第一个单词Ort不包含在此索引中。您应该更改此系统参数,重新启动服务器,然后重建所有FULLTEXT索引。

REPAIR TABLE cmsa QUICK;

答案 2 :(得分:-1)

您的查询对我来说非常合适。请检查您的表格是否为MYISAM,因为全文搜索仅在myisam引擎中工作。