首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何返回多个单词出现次数更多的结果

如何返回多个单词出现次数更多的结果
EN

Stack Overflow用户
提问于 2022-05-24 06:45:50
回答 1查看 162关注 0票数 4

当我在布尔全文搜索中使用多个单词时,InnoDB引擎希望在单词出现次数较多的情况下返回相关性结果,但由于某种原因,这种情况不会发生。

我的问题是如何在单词出现次数更多的情况下对结果排序。

例如,如果我有短语:新车宝马,我希望第一小部分结果包括所有三个单词,然后下一个结果包含任何两个单词,在结果结尾只包括一个单词。

数据库和查询示例

查询中的问题是,当score_name 0.6127969622612匹配2个单词时,其结果在下面,而得分为3.12283992767334的结果只匹配一个单词。

例如,您可以使用以下方法查看结果:

word(повдигаща):product_id: 16380,score_name=3.12283992767334,只匹配一个

words(разтегателна,product_id: 29953,score_name=0.6127969622612,match 2 маса)

如何对单词出现次数较多的第一结果进行排序?

有人能帮我解决这个问题吗?

查询

代码语言:javascript
复制
SELECT pd.product_id, pd.name,
CASE
WHEN name = 'разтегателна повдигаща се маса' THEN 200
WHEN name LIKE 'разтегателна повдигаща се маса%' THEN 100
WHEN name LIKE '% разтегателна повдигаща се маса %' THEN 50
WHEN name LIKE '%разтегателна повдигаща се маса' THEN 50
ELSE 
MATCH(name) AGAINST('разтегателна повдигаща се маса' IN BOOLEAN MODE) END AS score_name
FROM product_description pd
WHERE
MATCH(name) AGAINST('разтегателна повдигаща се маса' IN BOOLEAN MODE) 
ORDER BY score_name DESC
LIMIT 80

数据库

代码语言:javascript
复制
CREATE TABLE `product_description` (
`product_id` int(11) NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


ALTER TABLE `product_description`
ADD PRIMARY KEY (`product_id`),
ADD KEY `name` (`name`);
ALTER TABLE `product_description` ADD FULLTEXT KEY `name_full_text` (`name`);
EN

回答 1

Stack Overflow用户

发布于 2022-07-01 18:13:17

https://dev.mysql.com/doc/refman/8.0/en/fulltext-boolean.html

如果повдигаща的“相关性排名”很高,而其他行中没有这个词,那么接收到的数字就有意义了。独立地找出每个单词的相关性--这可能有助于证实我的假设。

考虑“要求”几个字:

代码语言:javascript
复制
AGAINST('+разтегателна +повдигаща се +маса' IN BOOLEAN MODE)

请注意,我不需要'се',因为如果innodb_ft_min_token_size =3或更多,这会导致混乱。

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

https://stackoverflow.com/questions/72358296

复制
相关文章

相似问题

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