【发布时间】:2014-05-21 11:32:49
【问题描述】:
我在带有全文索引的 mysql 5.6 中遇到了这种奇怪的行为
我正在尝试搜索患者数据库并首先获取完全匹配,然后通过分数以最低分数进行部分匹配,因此我不会返回 100000+ 个结果,只是一些建议以防止重复进入 EHR 类型的应用程序
问题是完全匹配和部分匹配的分数相同......
这是预期的行为吗? 我有什么选择?
【问题讨论】:
标签: mysql sql search indexing full-text-search
我在带有全文索引的 mysql 5.6 中遇到了这种奇怪的行为
我正在尝试搜索患者数据库并首先获取完全匹配,然后通过分数以最低分数进行部分匹配,因此我不会返回 100000+ 个结果,只是一些建议以防止重复进入 EHR 类型的应用程序
问题是完全匹配和部分匹配的分数相同......
这是预期的行为吗? 我有什么选择?
【问题讨论】:
标签: mysql sql search indexing full-text-search
您说完全匹配和部分匹配的分数相同,但您的示例中没有任何完全匹配。 (“路易斯测试”!=“路易斯文本”)。它只是有各种部分匹配。
这是预期行为,因为使用 NATURAL LANGUAGE MODE 的 MATCH 仅面向单词。它不会对部分单词匹配进行评分 - 即,相似的单词不计入相关性值。由于每条记录匹配的词数相同,并且每条记录的总词数相同,因此它们各自获得相同的相关值(分数)。
“相关性是根据行中的单词数、该行中唯一单词的数量、集合中的单词总数以及包含特定单词的文档(行)数来计算的。” -- http://dev.mysql.com/doc/refman/5.6/en/fulltext-natural-language.html
如果您想对单词进行模糊匹配,您应该查看这个 SO question 以了解可能的替代匹配方案: How do I do a fuzzy match of company names in MYSQL with PHP for auto-complete?
【讨论】: