MySQL Match Against:处理停止语的最简单方法



我从这个查询中得到零结果:

SELECT COUNT(1) FROM `myTable` WHERE MATCH(tagline) AGAINST(' +IT professional' IN BOOLEAN MODE)

我从这个得到92:

SELECT COUNT(1) FROM `myTable` WHERE `tagline` LIKE '%IT professional%'

我更喜欢第一个查询,因为使用我的设置,针对索引的MATCH速度快80%。显然";IT";是权宜之计,会引发问题。如果我想要第二个查询的功能和第一个查询的速度,那么处理这个问题最简单、最方便的方法是什么?

如果innodb_ft_min_token_size3的默认值,则IT为"太短";(与"权宜之计"相对(。进一步注意,+IT坚持IT,但由于IT被完全忽略,因此从未找到。因此;零结果";。

我对来自用户的任意数据的这种方法取得了很好的成功:如果单词有3个或更多个字符长,请在它前面加上+,否则就不用管它了:

... AGAINST('it +professional' IN BOOLEAN MODE)

这具有忽略";它";并且找到具有"0"的所有行;"专业"专业人士";,等

在某些情况下(也许不是你的(,这可能很有用:

WHERE MATCH(fullname) AGAINST("+Rick +James" IN BOOLEAN MODE)
AND fullname LIKE "%Rick James%"

这样做很快(因为全文非常高效,并且LIKE只针对那些与FT测试匹配的测试执行(。

它避免了

... Rick Smith and James Davis ...

在您的情况下,这个可能是合适的:

WHERE MATCH(tagline) AGAINST('IT +professional' IN BOOLEAN MODE)
AND tagline LIKE '%IT +professional%'

FT测试发现所有带有";专业的";是否";IT";是否;LIKE进一步过滤。

您的";"快80%";对我说桌子不是很大。我的技巧随着桌子的大小而提高。

最新更新