到现在为止我一直在用
WHERE col REGEXP 'IN (.*) WE TRUST'
但自从将完整索引搜索添加到此列之后,此查询的速度就非常慢。
我想知道如何使用全文索引搜索实现通配符搜索。
这是两个我一直在玩的查询,但我仍然得到了很多意想不到的结果,我不知道为什么我的查询会拉这些结果。
WHERE MATCH (markIdentification) AGAINST ('IN (.*) WE TRUST')
WHERE MATCH (markIdentification) AGAINST ('+IN (.*) +WE +TRUST')
WHERE MATCH (markIdentification) AGAINST ('+IN * +WE +TRUST')
这是唯一一个看起来更接近的。有什么建议吗?
谢谢您
更新问题参考:
SELECT * from table
WHERE MATCH (col) AGAINST ('+IN * +WE +TRUST')
AND col LIKE '%IN (.*) WE TRUST%'
是这样吗?如果没有,你会怎么做?
1条答案
按热度按时间ylamdve61#
全文搜索引擎忽略短于三个字符的单词。你可以设置
innodb_ft_min_token_size
选项,然后重新生成全文索引。anticle中的+(和-)语法是布尔搜索模式。所以要使用+你需要
布尔模式有很多特殊字符来控制搜索,但是
*
孤独不是其中之一。你可以说'TRUST*'
匹配trust
,trustee
,和trusted
.按照戈登的建议,你可以试试这个:
这将使用全文索引查找可能的匹配项,并使用regexp获得更精确的结果。因此,昂贵的regexp操作可以在更少的行上运行。
(当心
IN NATURAL LANGUAGE MODE
当您的表没有很多行时。它会产生奇怪的结果。索引器决定哪些词太常见而不必费心处理,如果你有少量的词,这个决定就会被扭曲。)