MySQL全文搜索结果相关性
Posted
技术标签:
【中文标题】MySQL全文搜索结果相关性【英文标题】:MySQL Fulltext search result relevance 【发布时间】:2014-02-18 07:51:45 【问题描述】:我有以下“银行”表
ID | name
1 | JPMorgan Chase bank
2 | Bank of south
3 | Citigroup bank
4 | Wells Fargo bank
5 | Bank of New York
所以当搜索“bank of”时,我希望搜索结果返回如下:
Bank of New York
Bank of south
Citigroup bank
JPMorgan Chase bank
Wells Fargo bank
但是下面的代码返回:
JPMorgan Chase bank
Bank of America
Citigroup bank
Wells Fargo bank
Bank of New York
这是代码:
$search_term = 'bank of';
$sql2 = "SELECT *,
MATCH(name) AGAINST ('.$search_term.' IN BOOLEAN MODE)
AS relevance FROM banks
HAVING relevance > 0.8
ORDER BY relevance DESC";
谢谢!
【问题讨论】:
考虑一下:出现在 50% 或更多行中的单词被认为是常见的并且不匹配。 @juergend,对,但我的选择是什么? 两个字符的单词,例如'of',不会被 mysql 全文索引索引,因为最小单词长度在 InnoDB 表中限制为 3 个字符,在 MyISAM 表中限制为 4 个字符。在这里阅读更多。在您有权将最小字长更改为 2 个字符的情况下,应该会给您预期的结果。 【参考方案1】:...对,但我的选择是什么?
你可以试试这样的
SELECT *,
MATCH(name) AGAINST ('bank of' IN BOOLEAN MODE) AS relevance,
name LIKE '%bank of%' AS full_match
FROM banks
HAVING relevance > 0.8
ORDER BY full_match DESC, relevance DESC, name
结果:
|身份证 |姓名 |相关性 |完整匹配 | |----|----------|------------|---------- --| | 5 |纽约银行| 1 | 1 | | 2 |南方银行| 1 | 1 | | 3 |花旗银行| 1 | 0 | | 1 |摩根大通银行 | 1 | 0 | | 4 |富国银行 | 1 | 0 |这里是SQLFiddle演示
【讨论】:
以上是关于MySQL全文搜索结果相关性的主要内容,如果未能解决你的问题,请参考以下文章