使用 "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 不是问题,请复制该字段,一份用于搜索,一份用于展示。由于另一个原因,这可能很有用:处理同义词。或者,考虑其他文本搜索替代方案。其他工具允许在查询中定位信息。
我有这样的查询:
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 不是问题,请复制该字段,一份用于搜索,一份用于展示。由于另一个原因,这可能很有用:处理同义词。或者,考虑其他文本搜索替代方案。其他工具允许在查询中定位信息。