使用“like”和“match()”进行等效搜索

时间:2015-10-12 14:09:02

标签: mysql search full-text-search

我有这样的查询:

SELECT * FROM table WHERE col LIKE '%word'

现在它在全文索引中的上述查询等价于什么?

应该注意的是,这确实有效:

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

修改

我想在这句话中选择'test':

这是一个测试。

1 个答案:

答案 0 :(得分:0)

我不认为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正则表达式)很有吸引力,但由于最小字长和其他原因,这些将无法编入索引。一些不寻常的混乱人物是一个不错的选择。

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