3

如何使 myisam 表返回与不同单词组合匹配的结果,而给定搜索字符串仅此而已。

我在我的标签表上使用以下查询

SELECT * FROM tags WHERE MATCH (name) AGAINST('word1 word2'));

并且该表可能包含如下行

  • 1 字 1 字 2 字 3
  • 2字2字3字4
  • 3 字1
  • 4 字 3 字 2
  • 5 字2
  • 6字2字1
  • 7字1字2
  • 8字3字4

我只需要以下行作为结果

  • 3 字1
  • 5 字2
  • 6字2字1
  • 7字1字2

但我得到的实际结果是

  • 1 字 1 字 2 字 3
  • 2字2字3字4
  • 3 字1
  • 4 字 3 字 2
  • 5 字2
  • 6字2字1
  • 7字1字2

如何做到这一点?

我尝试过使用布尔模式搜索,+但它使+搜索结果中强制给出的单词不是我想要的。

4

2 回答 2

2

这可能是一个迟到的答复,但是,这将解决问题。使用IN BOOLEAN MODEMySQL FTS。

SELECT * FROM `tags` WHERE MATCH (`name`) AGAINST('+word1 +word2' IN BOOLEAN MODE)

看看全文布尔模式

注意在实现这个特性时,MySQL 使用了有时被称为隐含布尔逻辑的东西,其中

+代表与

-代表不

[no operator]暗示或

于 2017-03-09T08:17:58.027 回答
0

我不认为 mysql FULLTEXT 支持你想要的。我只能做你想做的事

SELECT * 
FROM tags 
where (name LIKE 'word1' OR name LIKE 'word2' OR name LIKE 'word1 word2' or name LIKE 'word2 word1') ;

在此处阅读有关全文的更多信息mysql fulltext

于 2013-01-10T07:00:14.153 回答