2016-08-03 79 views
0

我有表和标题,我只想找到标题组成的全部单词的子集。在MySQL全文搜索中,如何搜索只包含特定单词的文档?

例如,

SELECT title 
FROM my_titles_table WHERE MATCH (title) AGAINST ('word1 word2 word3 ... wordN' IN NATURAL LANGUAGE MODE) 

我想找到由字词1字词2 WORD3 ... wordN或它们的子集的所有冠军,但没有其他字。例如,如果我的查询是“如何训练你的龙”作为我的话,那么我想找到像“龙”,“训练你的龙”或“你的龙训练”,而不是“地下城”和龙“,因为单词”地牢“不在我的查询中。

回答

0

我不认为全功能搜索支持此功能。事实上,很难弄清楚这种做法的蛮力方法。

这是一个强制的方法:

where trim(replace(replace(replace(title, $word1, ''), $word2), ''), $word3, '')) = '' 

这是不完全完美,因为“菠萝”将匹配“菠萝”。

嗯。 。 。有使用正则表达式另一种选择:

where title like concat('^(', replace('word1 word2 word3', ' ', '|'), 
          '[ ]*)+$) 

也就是说,本场比赛必须在开始和结束的字符串,而其间必须全部匹配的话开始。

据我所知,没有办法加快这样的查询。