【问题标题】:MySQL Fulltext Boolean Mode search returns too many resultsMySQL全文布尔模式搜索返回太多结果
【发布时间】:2015-05-11 10:54:15
【问题描述】:

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

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

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

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

但是,此查询返回包含 Paul 的行,但不包含“Van”或“Dyk”。同样,我希望查询仅返回包含 Artist 或 Track Name 列中所有关键字的行。

提前致谢

【问题讨论】:

    标签: php mysql full-text-search


    【解决方案1】:

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

    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;
    

    使用first MATCH() 我们在非布尔搜索模式下获得分数(更具特色)第二个 MATCH() 确保我们只返回我们想要的结果(全部三个字)

    所以你的查询会变成:

    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;
    

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

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

    【讨论】:

    • 所以你是说关键字应该保持原样并放在双引号中以被视为一个?如果关键字的顺序不匹配,那么用户输入“Van dyk paul”会发生什么?理想情况下,这也应该返回带有“Paul van dyk”的结果。我不确定你的方法是否能解决这个问题。
    • 是的。关键字的任何顺序都会给您相同的结果。请检查我编辑的答案,如果它能给你带来更好的结果,请告诉我。
    【解决方案2】:

    借鉴@Avidan 的回答。这些是可以对全文搜索执行的操作,以帮助创建您想要的查询。

    以下示例演示了一些使用 布尔全文运算符:

    '苹果香蕉'

    查找至少包含两个单词之一的行。

    '+苹果+果汁'

    查找包含两个单词的行。

    '+苹果麦金塔'

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

    '+苹果-macintosh'

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

    '+苹果~macintosh'

    查找包含单词“apple”的行,但如果该行还包含 “macintosh”这个词,如果没有行的话,给它的评分要低。这是 比搜索“+apple -macintosh”更“柔和”,因为它的存在 “macintosh” 导致该行根本不返回。

    '+苹果+(>营业额

    查找包含单词“apple”和“turnover”或“apple”的行 和“馅饼”(以任何顺序),但“苹果营业额”的排名高于 “苹果馅饼”。

    '苹果*'

    查找包含诸如“apple”、“apples”、“applesauce”、 或“小程序”。

    '“一些话”'

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

    【讨论】:

      猜你喜欢
      • 2012-04-20
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2015-11-10
      • 2011-03-04
      相关资源
      最近更新 更多