Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用“等效搜索”;例如;加上;匹配();_Mysql_Search_Full Text Search - Fatal编程技术网

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”。可能吗?