我的全文搜索查询存在问题,而且我已经找到了所有可以找到的论坛和主题,但我仍然遇到此问题。
我正在使用MySQL全文布尔模式搜索,根据两列(艺术家姓名和曲目标题)返回匹配的行。用户可以在搜索栏中输入他们想要的任何短语,结果应该只包含列中EITHER中搜索查询的所有部分的行。
这是我到目前为止的查询,它适用于大多数查询,但对于某些查询来说,结果过于松散,我不确定原因。
SELECT * FROM tracks WHERE MATCH(artist, title) AGAINST('+paul +van +dyk ' IN BOOLEAN MODE)
然而,这个查询返回包含Paul的行,而没有' Van'或者' Dyk'。同样,我希望查询只返回包含艺术家或曲目名称列中所有关键字的行。
提前致谢
答案 0 :(得分:3)
要在布尔模式下增强结果排序,您可以使用以下内容:
SELECT column_names, MATCH (text) AGAINST ('word1 word2 word3')
AS col1 FROM table1
WHERE MATCH (text) AGAINST ('+word1 +word2 +word3' in boolean mode)
order by col1 desc;
使用第一个 MATCH()
,我们会在非布尔搜索模式下获得分数(更有特色)。 第二 MATCH()
可确保我们确实只返回我们想要的结果(包含所有3个字)。
所以你的查询将成为:
SELECT *, MATCH (artist, title) AGAINST ('paul van dyk')
AS score FROM tracks
WHERE MATCH (artist, title)
AGAINST ('+paul +van +dyk' in boolean mode)
order by score desc;
希望;你现在会得到更好的结果。
如果有效或无效;请告诉我。
答案 1 :(得分:0)
撇开@ Avidan的回答。这些是可以对全文搜索执行的操作,以帮助创建所需的查询。
以下示例演示了一些使用的搜索字符串 布尔全文运算符:
'apple banana'
查找包含两个单词中至少一个的行。
'+ apple + juice'
查找包含两个单词的行。
'+ apple macintosh'
查找包含单词“apple”的行,但如果它们排名更高 还包含“macintosh”。
'+ apple -macintosh'
查找包含单词“apple”但不包含“macintosh”的行。
'+ apple~macintosh'
查找包含单词“apple”的行,但该行还包含 单词“macintosh”,评分低于行没有。这是 比搜索'+ apple -macintosh'更“柔和”,为此而存在 “macintosh”会导致该行无法返回。
'+ apple +(>营业额
查找包含“apple”和“turnover”或“apple”字样的行 和“馅饼”(以任何顺序),但排名“苹果营业额”高于 “苹果馅饼”。
'苹果*'
查找包含“apple”,“apples”,“applesauce”等字词的行, 或“applet”。
'“有些话”'
文档:https://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html