Mysql LIKE或FULLTEXT搜索 - 这里使用哪一个?

时间:2011-11-24 06:30:53

标签: mysql search full-text-search

我正在开发一个基于php-mysql的网站,主要用于搜索。我之前在所有查询中都使用了LIKE运算符。但是我的sql变得太大而复杂,因为可能有多个关键字要通过字段列表进行搜索。我发现FULLTEXT搜索不仅提高了性能,而且查询变得更具可读性。但对于FULLTEXT搜索,我有以下问题:

  1. 我可能不得不使用狂野角色,至少在最后,例如。
  2.   

    $ sql = mysql_query(“SELECT * FROM table WHERE MATCH(field1,field2,   field3,field4)AGAINST('+ val1 * + val2 * + val3 *');“);

    而不是

      

    $ sql = mysql_query(“SELECT * FROM table WHERE(filed1 LIKE'%val1%'OR   filed2 LIKE'%val1%'OR filed3 LIKE'%val1%'OR filed4 LIKE'%val1%')   AND(提交1 LIKE'%val2%'或提交2 LIKE'%val2%'或提交3 LIKE'%   val2%'或已归档4 LIKE'%val2%')AND(已提交1 LIKE'%val3%'或已归档2   LIKE'%val3%'OR filed3 LIKE'%val3%'OR filed4 LIKE'%val3%')“);

    上一个查询是否真的会提高我对第二个查询的效果?

    2。  对于高级搜索,用户输入可以是与结果匹配的关键字,也可以是与结果不匹配的关键字。所以我的sql如下:

      

    $ sql = mysql_query(“SELECT * FROM table WHERE(filed1 LIKE'%val1%'OR   filed2 LIKE'%val1%'OR filed3 LIKE'%val1%'OR filed4 LIKE'%val1%')   AND(提交1 LIKE'%val2%'或提交2 LIKE'%val2%'或提交3 LIKE'%   val2%'或已归档4 LIKE'%val2%')AND(已提交1 LIKE'%val3%'或已归档2   LIKE'%val3%'OR filed3 LIKE'%val3%'OR filed4 LIKE'%val3%')“)   AND(提交1不喜欢'%val1%'或提交2不喜欢'%val1%'或提交3   不喜欢'%val1%'或提交4不喜欢'%val1%')和(提交1不喜欢'%   val2%'或者提交2不喜欢'%val2%'或提交3不喜欢'%val2%'或   提交4不喜欢'%val2%')和(提交1不喜欢'%val3%'或提交2   不喜欢'%val3%'或提交3不喜欢'%val3%'或提交4不喜欢'%   VAL3%')“);

    这不安静可读,我觉得会降低搜索性能。但我不确定是否可以使用FULLTEXT搜索来完成。如果是,那么查询是什么?

    最后,我的问题是我应该坚持使用WHERE / LIKE进行搜索还是进行FULLTEXT搜索?

    P.S。我的数据库很小,只有1000行和10个字段。

1 个答案:

答案 0 :(得分:0)

对于基于高级文本的搜索,答案是两者都不是最佳的。相反,您应该使用专用的文本检索搜索引擎,如LuceneSolR

它们是围绕这个问题而建立的。最好使用正确的工具。