首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql全文搜索顺序按相关性结果不正确的参数匹配

Mysql全文搜索顺序按相关性结果不正确的参数匹配
EN

Stack Overflow用户
提问于 2015-08-04 09:18:01
回答 1查看 720关注 0票数 1

我需要Mysql全文搜索实现在我的网站上。我的意图是,如果用户输入搜索词,大多数相关结果应该是第一位的,其他结果应该是第一位的。

代码语言:javascript
复制
SELECT pr.*
, MATCH (pr.title) AGAINST ('Samsung Galaxy S6' IN BOOLEAN MODE) AS relevance_1
, MATCH (pr.description, pr.tags) AGAINST ('Samsung Galaxy S6' IN BOOLEAN MODE) AS relevance_2
, MATCH (category.name, category.description) AGAINST ('Samsung Galaxy S6' IN BOOLEAN MODE) AS relevance_3
FROM products AS pr
LEFT JOIN category ON category.id = pr.category_id
WHERE MATCH (pr.title, pr.description, pr.tags, category.name, category.description) AGAINST ('Samsung Galaxy S6' IN BOOLEAN MODE)
ORDER BY (relevance_1 * 3) + (relevance_2 * 2) + relevance_3 DESC

这是我的方琴键

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-04 10:41:44

在全文搜索中,您需要在您的小提琴中使用一个FULLTEXT索引,我可以看到有两个索引,一个用于表products,另一个用于产品,您在3列上有一个复合索引,title, description, tags,对于类别,您有包含2列的复合索引,在select语句中,您引用的是一个列标题(别名为relevance_1),这将导致错误。

找不到与列列表匹配的全文索引

因为只能为标题列找到索引,所以必须在MATCH()语句中指定定义全文索引的所有列,因此WHERE子句也存在相同的问题,其中包括表产品中的3列和类别中的2列,并且您已经在一条MATCH语句中定义了它们。

匹配(pr.title,pr.description,pr.tags,category.name,category.description)

这也是错误的,您必须根据全文索引定义指定两个匹配语句,这些匹配语句的标准取决于您如何使用AND/OR来匹配它们。

因此,最终的工作查询将类似于

代码语言:javascript
复制
SELECT pr.*
, MATCH (pr.title,pr.description, pr.tags) AGAINST ('Samsung Galaxy S6' IN BOOLEAN MODE) AS relevance_2
, MATCH (category.name, category.description) AGAINST ('Samsung Galaxy S6' IN BOOLEAN MODE) AS relevance_3
FROM products AS pr
LEFT JOIN category ON category.id = pr.category_id
WHERE MATCH (pr.title, pr.description, pr.tags) AGAINST ('Samsung Galaxy S6' IN BOOLEAN MODE)
OR 
MATCH (category.name, category.description) AGAINST ('Samsung Galaxy S6' IN BOOLEAN MODE) 
ORDER BY (relevance_2 * 2) + relevance_3 DESC

DEMO

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31805323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档