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

我遇到了全文搜索查询的问题,并且我几乎浏览了所有可以找到的论坛和主题,但我仍然遇到此问题。

我正在使用MySQL全文布尔模式搜索来返回基于两列(艺术家名称和曲目标题)的匹配行。 用户可以在搜索栏中输入他们希望的任何短语,并且结果应该只是包含搜索查询的所有部分的行,其中的任何一列都是。

这是我迄今为止的查询,它适用于大多数查询,但对于一些查询返回的结果太松散,我不知道为什么。

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

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

提前致谢


要增强布尔模式下结果的排序,您可以使用以下内容:

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;

希望; 你现在会得到更好的结果。

如果它工作或不工作; 请告诉我。


捎带@艾维丹的答案。 这些是可以在全文搜索上执行的操作,以帮助创建您想要的查询。

以下示例演示了一些使用布尔全文操作符的搜索字符串:

'苹果香蕉'

查找至少包含其中一个单词的行。

'+苹果+果汁'

查找包含两个单词的行。

'+苹果麦金塔'

找到包含单词“apple”的行,但如果它们也包含“macintosh”,则排名更高的行。

'+苹果 - 麦金托什'

查找包含单词“apple”但不包含“macintosh”的行。

'+ apple〜macintosh'

查找包含单词“apple”的行,但如果该行还包含单词“macintosh”,则将其评估为低于行不包含的单词。 这比搜索'+ apple -macintosh'“更柔和”,因为“macintosh”的存在导致该行不被返回。

'+苹果+(营业额)

查找包含“苹果”和“营业额”,或“苹果”和“果馅奶酪卷”(以任何顺序)的单词的行,但将“苹果营业额”评为高于“苹果馅”。

'苹果*'

查找包含“apple”,“apples”,“applesauce”或“applet”等词的行。

'“一些单词”'

文档:https://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

链接地址: http://www.djcxy.com/p/75293.html

上一篇: MySQL Fulltext Boolean Mode search returns too many results

下一篇: Fulltext Search engine, multiple columns, boolean mode