1

我有一个包含数千条记录的表(INNODB db),并且有些列是全文索引的。我在布尔模式下使用全文,它工作得很好,除了 id 为 1 的行。它总是向我显示相关性为 0,即使搜索的单词/s 存在于索引列中,并且在其他行上经常找到该单词。我已经检查了停用词,但这不是问题。就像全文搜索在 id 1 的行上是盲目的。有什么建议吗?

行为示例:

SELECT *,  MATCH(full_name, short_name, long_description, summary, model) AGAINST("snom" IN BOOLEAN MODE) as relevance FROM product_sheets

结果:

ID 全名 简称 模型 详细描述 概括 关联
1 Snom手机黑12线 手机 D385 斯诺姆电话.. 斯诺姆,电话 0
2 Snom手机蓝12线 手机 D385 斯诺姆电话.. 斯诺姆,电话 38.311..
.. .. .. .. .. .. ..

全文索引应用于片段中显示的列。

4

2 回答 2

1

我无法重现您的问题,可能是您正在使用的版本,尝试更新到可用的最新版本

CREATE TABLE product_sheets
    (`id` int, `full_name` varchar(27), `short_name` varchar(12)
    , `model` varchar(4), `long_description` varchar(15), `summary` varchar(13)
    ,FULLTEXT (full_name, short_name, long_description, summary, model))
;
    
INSERT INTO product_sheets
    (`id`, `full_name`, `short_name`, `model`, `long_description`, `summary`)
VALUES
    (1, '"Snom phone black 12 lines"', '"Snom phone"', 'D385', '"Snom phone .."', '"Snom, phone"'),
    (2, '"Snom phone blue 12 lines"', '"Snom phone"', 'D385', '"Snom phone .."', '"Snom, phone"')
;
SELECT *,  MATCH(full_name, short_name, long_description, summary, model) AGAINST("snom" IN BOOLEAN MODE) as relevance FROM product_sheets
编号 | 全名 | 短名 | 型号 | 长描述 | 总结 | 关联
-: | :---------------------------- | :----------- | :---- | :--------------- | :------------ | -------------------------:
 1 | 《snom手机黑12线》 | “snom电话” | D385 | “Snom 电话..” | “Snom,电话” | 0.000000007543713209656744
 2 | 《snom手机蓝12线》 | “snom电话” | D385 | “Snom 电话..” | “Snom,电话” | 0.000000007543713209656744

db<>在这里摆弄

于 2021-08-25T17:50:50.097 回答
1

(这可能会或可能不会修复索引。请尝试一下。)

页面OPTIMIZE TABLE

在对属于 InnoDB 表中的 FULLTEXT 索引的列执行大量插入、更新或删除操作之后。首先设置配置选项 innodb_optimize_fulltext_only=1。要将索引维护周期保持在合理的时间,请设置 innodb_ft_num_word_optimize 选项以指定要在搜索索引中更新多少单词,并运行一系列 OPTIMIZE TABLE 语句,直到搜索索引完全更新。

(请报告它是否解决了您的问题。)

于 2021-08-27T23:03:16.897 回答