我有一个职业头衔数据库,我正在尝试运行一些查询。我正在使用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在排名上没有排名完全匹配?有什么办法可以改进搜索算法吗?
答案 0 :(得分:0)
我猜您应该将列的排序规则更改为不区分大小写的排序规则。 例如。 latin1到latin1_bin
区分大小写正在进行匹配。 看看这里: http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html
答案 1 :(得分:0)
您可能希望在搜索中使用其中一种修改器模式。查看fulltext documentation。
特别是,默认情况下它使用“自然语言”搜索,而您可能想要考虑“布尔模式”并为每个关键字添加加号前缀以使其在结果中成为必需,或使用双引号搜索确切的短语。 Check the boolean mode documentation了解有关语法的更多信息。
您还可以考虑使用各种模式执行多次搜索并进行自己的权重。