我在我的表中使用此查询进行全文搜索:
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”这两个词都在条目的标题栏中。
其他全文搜索效果很好。
任何想法?
答案 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更改最小和最大字长
忽略称为停用词的词,您可以指定自己的停用词,但默认词包括,有,有些 - 请参阅默认值 停用词列表。
答案 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引擎中工作。