我正在尝试找到一种方法来查询特定数据库表列中的相似字符串或单词。例如,如果我有一个字符串
I have a foo bar in my kitchen
查询将返回结果,例如...
foo fighters are a good band
raise the bar
kitchen remodeling contractors
foo bar is a funny word
这可以通过一个查询来完成吗?
我正在尝试找到一种方法来查询特定数据库表列中的相似字符串或单词。例如,如果我有一个字符串
I have a foo bar in my kitchen
查询将返回结果,例如...
foo fighters are a good band
raise the bar
kitchen remodeling contractors
foo bar is a funny word
这可以通过一个查询来完成吗?
您似乎正在尝试匹配给定列表中的任何单词。我会使用“OR”运算符。
示例(假设您的表被调用my_table
并且您正在搜索的列是my_column
):
SELECT * FROM my_table WHERE my_column like '%I%'
OR my_column LIKE '%have%'
OR my_column LIKE '%a%'
OR my_column LIKE '%foo%'
OR my_column LIKE '%bar%'
OR my_column LIKE '%in%'
OR my_column LIKE '%my%'
OR my_column LIKE '%kitchen%';
但是,由于双通配符,此查询将运行非常缓慢。你也可以试试http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
在基本级别上,您希望在列上实现全文索引,因此(假设您的列是 col1 并且您的表是 tbl),您需要alter table tbl add fulltext(col1);
使用select id from tbl where match(col1) against 'foo' or match(col1) against 'bar' or match(col1) against
kitchen...
等进行搜索,依此类推,如所述在本教程中。@WinnieTong 的回答没有错,只是这种用例正是全文索引的设计目的。
当您超出mysql的能力时,人们通常使用Sphinx或Apache SoLR来完成可搜索的索引。