我正在尝试使用 MySQL 的 FTS 来搜索索引内容以查找某些关键字。对于我正在尝试制作的内容,它需要文本中的一个或多个关键字,并且关键字必须是完全匹配的单词。但是,关键字是否在另一个词的中间并不重要,例如搜索“STACK”时,它应该匹配:
- 嗨,我有一堆溢出
- 靠墙堆放
- 这些书柜完全堆放了
我之前是用下面的方法:
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)
关于php - MySQL全文搜索多个关键字一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26137709/