MySQL多关键字搜索算法

时间:2010-12-15 10:27:24

标签: php search mysql full-text-search

有人可以就如何构建多重搜索算法向我提出想法或建议吗?

例如,我的MySQL数据库中有一个产品表,我希望能够在titledescription列中搜索多个关键字。这些关键字可能包含多个单词,例如:“blue electric bosch toaster machines”。

实现这一目标的最佳方法是什么?

到目前为止,我一直在考虑:     1.在MySQL中使用LIKE“%$ keywords%”     2.根据空格分割关键字,并搜索每个单词,但我认为最好搜索整个关键字。

3 个答案:

答案 0 :(得分:2)

使用全文索引

答案 1 :(得分:1)

在关键字之间使用OR来获取与至少一个关键字匹配的每条记录。

然后以编程方式为每个匹配设置一个值。例如,为每个关键字的第一个匹配项赋予更高的值,以便匹配多个关键字的记录优先于多次匹配相同单词的记录。

答案 2 :(得分:1)

通过在开头和结尾使用LIKE百分比,您的关键字的任意一侧都会有一个通配符。所以这应该得到你想要的。

搜索整个短语:

WHERE (Title LIKE "%blue electric bosch toaster machine%" OR Body LIKE "%blue electric bosch toaster machine%")

或者单独搜索每个关键字(将返回更多结果):

WHERE (Title LIKE "%blue%" OR Title LIKE "%electric%" OR Title LIKE "%bosch%" OR Title LIKE "%toaster%" OR Title LIKE "%machine%" OR Body LIKE "%blue%" OR Body LIKE "%electric%" OR Body LIKE "%bosch%" OR Body LIKE "%toaster%" OR Body LIKE "%machine%")

如果您正在搜索大量数据集并且像LIKE这样的常用方法太慢,那么我建议使用类似Sphinx的内容 - 在全文搜索时它非常快。