MySQL全文搜索多个关键字一个多



我正在尝试使用MySQL的FTS来搜索索引内容,以查找某些关键字。对于我试图制作的内容,它需要文本中的一个或多个关键字,并且这些关键字必须与单词完全匹配。然而,如果关键字位于另一个单词的中间并不重要,例如,当搜索"STACK"时,它应该匹配:

  1. 嗨,我有一堆溢流
  2. 靠墙堆放
  3. 这些书柜完全积压了

我之前使用了以下方法:

SELECT ... FROM ... WHERE text LIKE '%keyword1%' OR LIKE '%keyword2%' OR LIKE '%keyword3%'

这将返回包含任何关键字的任何文本。然而,这开始减慢了几乎所有的速度,因为大多数索引内容都很大(存储在blob中),而且我有500多行要索引。由于Like没有使用任何索引方法,我尝试使用以下方法转换为FTS:

SELECT ... FROM ... WHERE MATCH(text) AGAINST ('+keyword1 +keyword2 +keyword3' IN BOOLEAN MODE)

这对单个关键字很有效,但当输入多个关键字时,这会失败,因为带有+操作数的FTS需要找到与给定单词匹配的词。但如果没有这些关键字,FTS匹配的是模糊的结果,而不是精确的结果。我最终错过了最明确包含关键字的内容。

我可以使用什么来获取包含一个或多个axact关键字的所有内容?

试试这样的东西:

SELECT * FROM table MATCH (text) AGAINST ('+"keyword1" +"keyword2"' IN BOOLEAN MODE)

听起来您正在寻找以下内容:

SELECT ... FROM ... 
WHERE MATCH(text) AGAINST ('+keyword1' IN BOOLEAN MODE) 
OR MATCH(text) AGAINST ('+keyword2' IN BOOLEAN MODE)
OR MATCH(text) AGAINST ('+keyword3' IN BOOLEAN MODE)

相关内容

最新更新