我有这样的查询:
SELECT * FROM table WHERE col LIKE '%word'
现在它在全文索引中的上述查询等价于什么?
应该注意的是,这确实有效:
SELECT * FROM table WHERE MATCH(col) AGAINST('+word' IN BOOLEAN MODE)
修改
我想在这句话中选择'test':
这是一个测试。
答案 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正则表达式)很有吸引力,但由于最小字长和其他原因,这些将无法编入索引。一些不寻常的混乱人物是一个不错的选择。
另请注意,这会使文本更长,您可能希望删除这些文字以用于演示目的。如果空间不是问题,请复制字段,一个用于搜索,一个用于显示。这可能有用于另一个原因:处理同义词。或者,考虑其他文本搜索替代方案。其他工具允许在查询中定位信息。