我有一个职业头衔的数据库,我正在尝试运行一些查询。我使用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;
当我对我的数据库运行这个查询时,前三个结果是"Processor“、"Egg Processor”和"COPRA Processor“。前两个的匹配分数完全相同,为6.04861688613892。为什么MySQL不会把精确匹配的结果排在第一位呢?我能做些什么来改进搜索算法吗?
发布于 2011-03-07 06:05:39
您可能希望在搜索中使用其中一种修改器模式。检查fulltext documentation。
特别是,在默认情况下,它使用“自然语言”搜索,而您可能想要考虑“布尔模式”,并在每个关键字前加上加号,以使其在结果中是强制的,或者使用双引号来搜索确切的短语。有关语法的详细信息,请参阅Check the boolean mode documentation。
您还可以考虑使用各种模式执行多个搜索,并进行自己的加权。
发布于 2011-03-07 05:58:18
我想您应该将列的排序规则更改为不区分大小写。例如:latin1到latin1_bin
正在对您的案例执行区分大小写的匹配。看看这里:http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html
https://stackoverflow.com/questions/5216268
复制相似问题