多栏多关键字的最佳MySQL搜索查询

多栏多关键字的最佳MySQL搜索查询,mysql,search,multiple-columns,keyword,Mysql,Search,Multiple Columns,Keyword,这里的问题是我有多个列: | artist | name | lyrics | content 我想通过多个关键字在这些列中搜索。问题是我不能用LIKE或/and生成任何好的算法。 最好的方法是搜索每列中的每个关键字,但这样我将得到可能包含名称中的关键字,但不包含艺术家的第二个关键字的结果。 我希望所有内容都与和相关,但这样,如果我只搜索一个列,那么它将适用于关键字。换句话说,要接收结果,每个列必须具有所有关键字 有没有可能有人知道我必须创建什么算法,当你用3个关键字(例如:1表示艺术家,2表

这里的问题是我有多个列:

| artist | name | lyrics | content
我想通过多个关键字在这些列中搜索。问题是我不能用LIKE或/and生成任何好的算法。 最好的方法是搜索每列中的每个关键字,但这样我将得到可能包含
名称中的关键字,但不包含
艺术家的第二个关键字的结果。
我希望所有内容都与相关,但这样,如果我只搜索一个列,那么它将适用于关键字。换句话说,要接收结果,每个列必须具有所有关键字


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

并且也适用于显示多行。这取决于表中未提供的行数。PS,如果我的答案不清楚,我很抱歉,我没有名声把它作为一个评论

,也可以显示多行。这取决于表中未提供的行数。PS,如果我的答案不清楚,我很抱歉,我没有声誉将其作为评论

最好的解决方案不是使用MySQL进行搜索,而是使用ApacheSolr之类的文本索引工具

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

name:"word" AND artist:"otherword"
即使您将原始数据保存在MySQL中,使用Solr对数据进行索引也是非常常见的

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

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

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)

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

最好的解决方案不是使用MySQL进行搜索,而是使用ApacheSolr之类的文本索引工具

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

name:"word" AND artist:"otherword"
即使您将原始数据保存在MySQL中,使用Solr对数据进行索引也是非常常见的

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

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

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)

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

您能用一个示例添加更多示例吗output@Mr.Bhosale简而言之:
artist
='justintimberlake',
name
='Like I Love You',
歌词
=“如果你放手,音乐会让你筋疲力尽”。我想有结果,当我搜索:“贾斯汀汀布莱克”,“贾斯汀喜欢的爱”,“贾斯汀槽你的骨头”。问题是当您使用AND时,如果
名称中没有Justin,则不会显示任何结果。使用全文的方法几乎可以工作,就像我想要的那样。但我无法在其中搜索部分单词,如有%XXX%,最小字符数为4。还有像“on,you,me,we,are”这样的词……你能用一个例子来添加更多的示例吗output@Mr.Bhosale简而言之:
artist
='Justin Timberlake',
name
='Like I Love You',
歌词
='如果你放手了,音乐会让你筋疲力尽'。我想有结果,当我搜索:“贾斯汀汀布莱克”,“贾斯汀喜欢的爱”,“贾斯汀槽你的骨头”。问题是当您使用AND时,如果
名称中没有Justin,则不会显示任何结果。使用全文的方法几乎可以工作,就像我想要的那样。但我无法在其中搜索部分单词,如有%XXX%,最小字符数为4。还有像“on,you,me,we,are”这样的词……好了,现在可以用了。。。我昨晚试过了,但我不知道我必须创造一些东西。。。我只是尝试选择…但是,有一个问题。不显示4个字符以下的关键字。。。例如,如果你搜索“Tanq”就可以了,但是如果你搜索“Ego”,就没有结果了……如果有人搜索单词的一部分,我该怎么做呢?MySQL的全文索引不支持“词干”或搜索词根。您只能使用它来搜索完整单词。是的,默认最小单词大小为4个字符,由
innodb\u ft\u min\u token\u size
选项控制。请参阅Ok上的文档,现在可以使用了。。。我昨晚试过了,但我不知道我必须创造一些东西。。。我只是尝试选择…但是,有一个问题。不显示4个字符以下的关键字。。。例如,如果你搜索“Tanq”就可以了,但是如果你搜索“Ego”,就没有结果了……如果有人搜索单词的一部分,我该怎么做呢?MySQL的全文索引不支持“词干”或搜索词根。您只能使用它来搜索完整单词。是的,默认最小单词大小为4个字符,由
innodb\u ft\u min\u token\u size
选项控制。请参阅上的文档