使用 "like" 和 "match()" 的等效搜索

Equivalent searching using "like" with "match()"

我有这样的查询:

SELECT * FROM table WHERE col LIKE '%word'

现在,在全文索引中,它与上述查询的等效项是什么?

需要注意的是,这确实有效:

SELECT * FROM table WHERE MATCH(col) AGAINST('+word' IN BOOLEAN MODE)

编辑

我要select'test'这句话:

测试了

我不认为 MySQL 直接支持这个。您可以通过以下方式加快查询速度:

SELECT t.*
FROM (SELECT *
      FROM table
      WHERE MATCH(col) AGAINST('+word' IN BOOLEAN MODE)
     ) t
WHERE col LIKE '%word';

(我不是 100% 确定需要子查询。)

如果您知道这将是一种常见的搜索类型,您可以找到解决方案。将每个文档修改为:

BEGINDOCMARKER blah blah blah ENDDOCMARKER

那你可以搜索:

SELECT *
FROM table
WHERE MATCH(col) AGAINST('"word ENDDOCMARKER"' IN BOOLEAN MODE)

如果您确实采用这种方法,请小心标记。使用 ^$(ala 正则表达式)很诱人,但由于最小字长和其他原因,这些将不会被索引。一些不常见的字符混乱是个不错的选择。

另请注意,这会使文本变长,出于演示目的,您可能希望删除这些词。如果 space 不是问题,请复制该字段,一份用于搜索,一份用于展示。由于另一个原因,这可能很有用:处理同义词。或者,考虑其他文本搜索替代方案。其他工具允许在查询中定位信息。