针对多列中的多个关键字的最佳MySQL搜索查询

时间:2016-12-16 04:10:42

标签: mysql search multiple-columns keyword

这里的问题是我有多列:

| artist | name | lyrics | content

我想通过多个关键字在这些列中进行搜索。问题是我不能用LIKE或/和制作任何好的算法。 最好的可能是在每列中搜索每个关键字,但这样我将获得可能包含name中关键字的结果,但不会包含artist的第二个关键字。 我希望所有内容都与 AND 相关,但这样,如果我只搜索一列,它将适用于关键字。换句话说,要接收结果,每列都必须包含所有关键字...

有没有人可能知道我必须创建什么算法,当你用3个关键词搜索时(例如:1为艺术家,2为名称),以找到正确的结果?

2 个答案:

答案 0 :(得分:2)

最好的解决方案不是使用MySQL进行搜索,而是使用像Apache Solr这样的文本索引工具。

然后,您可以针对Solr运行查询,如:

name:"word" AND artist:"otherword"

即使将原始数据保存在MySQL中,使用Solr来索引数据也很常见。

它不仅可以为您提供所需的查询灵活性,而且比在MySQL上使用LIKE '%word%'查询运行速度快数百倍。

另一种选择是使用MySQL的内置fulltext indexing功能:

CREATE FULLTEXT INDEX myft ON mytable (artist, name, lyrics, content);

SELECT * FROM mytable 
WHERE MATCH(artist, name, lyrics, content) 
      AGAINST ('+word +otherword' IN BOOLEAN MODE)

但是如果你想搜索特定列中出现的单词,它就不那么灵活,除非你在每一列上创建一个单独的索引。

答案 1 :(得分:0)

AND也适用于显示多行。它只取决于你没有提供的表格中的行数。 PS,对不起,如果我的回答不清楚,我没有声誉可以发表评论