【问题标题】:MySQL Match() not finding most optimal matchMySQL Match() 没有找到最佳匹配
【发布时间】:2011-03-07 05:44:01
【问题描述】:

我有一个职业头衔数据库,我正在尝试对其进行一些查询。我正在使用 Match() 尝试使用以下 SQL 为用户输入的字符串找到最匹配的职业头衔:

SELECT *, MATCH (occupation_title) AGAINST ('EGG PROCESSOR') 
AS score FROM occupational_titles WHERE MATCH (occupation_title) 
AGAINST ('EGG PROCESSOR') ORDER BY score DESC;

当我对我的数据库运行此查询时,前三个结果是“处理器”、“鸡蛋处理器”和“COPRA 处理器”。前两个具有完全相同的匹配分数 6.04861688613892。为什么 MySQL 不会将精确匹配命中列为第一结果?我可以做些什么来改进搜索算法?

【问题讨论】:

    标签: mysql full-text-search match


    【解决方案1】:

    您可能希望在搜索中使用其中一种修饰符模式。检查fulltext documentation

    特别是,默认情况下它使用“自然语言”搜索,而您可能需要考虑“布尔模式”并在每个关键字前面加上一个加号以使其在结果中成为强制性,或者使用双引号来搜索确切的短语。 Check the boolean mode documentation 了解更多语法信息。

    您还可以考虑使用各种模式执行多个搜索并进行自己的加权。

    【讨论】:

    • 当我找不到完全匹配时,我不介意自然语言,但在这种情况下它不起作用
    【解决方案2】:

    我想您应该将列的排序规则更改为不区分大小写的排序规则。 例如。 latin1 到 latin1_bin

    正在对您的情况进行区分大小写的匹配。 看看这里: http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      相关资源
      最近更新 更多