gpt4 book ai didi

mysql - 全文搜索排名

转载 作者:可可西里 更新时间:2023-11-01 06:38:47 26 4
gpt4 key购买 nike

我在 mysql 数据库中对全文搜索的搜索结果进行排名时遇到了一个小问题(这正是我所希望的)。我试过用两种方式写它:

自然之道:

SELECT SQL_CALC_FOUND_ROWS *,
MATCH(productname,keywords) AGAINST('$cl_search') AS score
FROM products
WHERE MATCH(productname,keywords) AGAINST('$cl_search')
ORDER BY score DESC,lastupdated DESC;

bool 方式:

SELECT SQL_CALC_FOUND_ROWS *,
((MATCH(productname) AGAINST('$cl_search' IN BOOLEAN MODE))+
(MATCH(keywords) AGAINST('\"$cl_search\"' IN BOOLEAN MODE))) AS score
FROM products
WHERE MATCH(productname,keywords) AGAINST('$cl_search')
ORDER BY score DESC,lastupdated DESC;

我喜欢在自然语言模式下搜索时获得的索引,但如何防止有人输入“bag bag bag bag bag”作为产品名称以获得良好的搜索结果?

所以我写了 bool 方法来解决这个问题,但是 1. 它比较慢 2. 我没有得到其他相关性索引,比如“与字数相比”。

关于如何两全其美有什么想法吗?

最佳答案

如何编写一个用户定义的函数来删除重复的关键字?那么您的查询将是什么样子:

SELECT SQL_CALC_FOUND_ROWS *,
MATCH(productname,RM_DUP(keywords)) AGAINST('$cl_search') AS score
FROM products
WHERE MATCH(productname,RM_DUP(keywords)) AGAINST('$cl_search')
ORDER BY score DESC,lastupdated DESC;

关于mysql - 全文搜索排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7438832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com