MySQL Fulltext布尔模式搜索返回太多结果

时间:2015-03-10 04:42:43

标签: php mysql full-text-search

我的全文搜索查询存在问题,而且我已经找到了所有可以找到的论坛和主题,但我仍然遇到此问题。

我正在使用MySQL全文布尔模式搜索,根据两列(艺术家姓名和曲目标题)返回匹配的行。用户可以在搜索栏中输入他们想要的任何短语,结果应该只包含列中EITHER中搜索查询的所有部分的行。

这是我到目前为止的查询,它适用于大多数查询,但对于某些查询来说,结果过于松散,我不确定原因。

SELECT * FROM tracks WHERE MATCH(artist, title) AGAINST('+paul +van +dyk ' IN BOOLEAN MODE)

然而,这个查询返回包含Paul的行,而没有' Van'或者' Dyk'。同样,我希望查询只返回包含艺术家或曲目名称列中所有关键字的行。

提前致谢

2 个答案:

答案 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