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

Rez*_*ami 2 php mysql full-text-search

我的全文搜索查询有问题,我几乎浏览了我能找到的所有论坛和线程,但仍然遇到这个问题。

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

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

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

但是,此查询返回包含 Paul 的行,但不包含“Van”或“Dyk”。同样,我希望查询仅返回包含“艺术家”或“曲目名称”列中所有关键字的行。

提前致谢

Avi*_*dan 5

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

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;
Run Code Online (Sandbox Code Playgroud)

使用第一个 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;
Run Code Online (Sandbox Code Playgroud)

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

如果有效或无效;请告诉我。