gpt4 book ai didi

mysql - 有趣的全文搜索行为

转载 作者:行者123 更新时间:2023-11-29 20:07:31 25 4
gpt4 key购买 nike

装箱台

CREATE TABLE `Footable` (
`id` int NOT NULL AUTO_INCREMENT,
`foo_colmn` varchar(255) NOT NULL,
FULLTEXT (foo_colmn),
PRIMARY KEY (`id`)) ENGINE=MyISAM;

插入一些行

INSERT INTO Footable (`foo_colmn`) VALUES ("against1111 , against");
INSERT INTO Footable (`foo_colmn`) VALUES ("against1111");
INSERT INTO Footable (`foo_colmn`) VALUES ("against");

并使用 bool 模式搜索

SELECT * FROM Footable WHERE MATCH 
(foo_colmn)
AGAINST
('against1111' IN BOOLEAN MODE);


-------------------------
id |foo_colmn |
---|--------------------|
1 |against1111 , against |
2 |against1111 |

是的,这很正常,但如果我搜索“反对”

SELECT * FROM Footable 
WHERE MATCH
(foo_colmn)
AGAINST
('against' IN BOOLEAN MODE);

---------------
id |foo_colmn |
---|----------|

不返回任何内容。我不明白发生了什么事。 (对我糟糕的英语感到抱歉)

最佳答案

您需要了解停用词(和短词)。

停用词是常见或被认为无用的单词,因此将从索引中删除。 MySQL 中包含一个标准列表。 “反对”是典型的停用词(还有"is"、“该”、“a”、“尽管如此”等)。

您可以阅读有关它们的信息 here .

解决方案是重建没有停用词(或使用自定义列表)的全文索引。

编辑。

我应该注意到,由于某些(现在怀疑是明智的)原因,InnoDB 停用词与 MyISAM 停用词不同。因此,我可以猜测您正在使用 MyISAM,因为“反对”仅在一个列表中。

关于mysql - 有趣的全文搜索行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40294331/

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