Mysql全文索引对完全匹配和部分匹配给出相同的分数,为什么?

标签 mysql sql search indexing full-text-search

我在带有全文索引的 mysql 5.6 中有这种奇怪的行为

我正在尝试搜索患者数据库并首先获得完全匹配,然后使用最低分数按分数进行部分匹配,因此我不会返回 100000 多个结果,只是一些防止重复进入 EHR 类型应用程序的建议

问题是完全匹配和部分匹配的分数相同...

这是预期的行为吗? 我有什么选择?

enter image description here

最佳答案

您声明完全匹配和部分匹配的分数相同,但您的示例中没有任何完全匹配。 (“路易斯测试”!=“路易斯文本”)。它只是有各种部分匹配。

这是预期的行为,因为使用自然语言模式的 MATCH 仅面向单词。它不会对部分单词匹配进行评分——即,相似的单词不计入相关值。由于每条记录中匹配的词数相同,且每条记录的总词数相同,因此它们各自获得相同的相关值(分数)。

"Relevance is computed based on the number of words in the row, the number of unique words in that row, the total number of words in the collection, and the number of documents (rows) that contain a particular word." -- http://dev.mysql.com/doc/refman/5.6/en/fulltext-natural-language.html

如果你想对单词进行模糊匹配,你应该看看这个 SO 问题,寻找可能的替代匹配方案: How do I do a fuzzy match of company names in MYSQL with PHP for auto-complete?

关于Mysql全文索引对完全匹配和部分匹配给出相同的分数,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22942659/

相关文章:

MySQL 内部连接?

Sql将两列合并为一个变量

search - 使用 Funnelback 查询参数在 AND 语句中嵌套 OR 语句

mysql - 使用 OR 时的 SQL 性能问题

mysql - 将 select 语句的值设置为变量并在更新查询 mysql 中使用

sql - 将两个 SQL select 合并为一个

sql - 如何在死锁图中捕获实际执行计划?

c++ - find_if 在一个集合上是线性的吗?

ruby-on-rails - 如何在 Ruby on Rails 3 中组合作用域?

mysql - MySQL 中出现错误 1054