Mysql 使用“等效搜索”;例如;加上;匹配();
我有这样一个问题:Mysql 使用“等效搜索”;例如;加上;匹配();,mysql,search,full-text-search,Mysql,Search,Full Text Search,我有这样一个问题: SELECT * FROM table WHERE col LIKE '%word' 现在,在全文索引中,它与上面的查询是什么等价的 应该注意的是,这确实起到了作用: SELECT * FROM table WHERE MATCH(col) AGAINST('+word' IN BOOLEAN MODE) 编辑 我想在这句话中选择“测试”: 这是一个测试。我不认为MySQL直接支持这一点。您可以通过执行以下操作来加快查询速度: SELECT t.* FROM (SELE
SELECT * FROM table WHERE col LIKE '%word'
现在,在全文索引中,它与上面的查询是什么等价的
应该注意的是,这确实起到了作用:
SELECT * FROM table WHERE MATCH(col) AGAINST('+word' IN BOOLEAN MODE)
编辑 我想在这句话中选择“测试”:
这是一个测试。我不认为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正则表达式)很有诱惑力,但由于最小字长和其他原因,这些将被取消索引。一些不常见的混杂字符是一个不错的选择
还要注意的是,这会使文本变长,您可能希望出于演示目的删除这些单词。如果空间不是问题,请复制该字段,一个用于搜索,一个用于显示。这可能有助于另一个原因:处理同义词。或者,考虑其他文本搜索方案。其他工具允许在查询中使用定位信息。没有等效工具。我认为MySQL不允许相对于文档开头和结尾定位信息。最好的方法是使用
match()
后跟like
。实际上,您的第一个查询是错误的,因为match()
无法找到我想要的内容(然后通过like()
搜索match()
的结果是无用的)。另外,您的第二个查询也是徒劳的,因为我可以使用这样的星号:反对布尔模式下的('word'*)
。事实上,我的问题是关于前缀(而不是后缀),我的意思是我需要使用MATCH()
在“ttest”中选择“test”,或在“hello”中选择“ello”。可能吗?