按多个字符串搜索,结果最佳

时间:2015-12-31 13:51:31

标签: mysql sql

我正在编写一些项目的索引,并且在索引完成后我对搜索功能有点困惑。我希望能够通过' name'来搜索我的搜索结果。但是,我可能不知道确切的术语,因此需要部分结果。

例如,我的条目名称为" Item entry 1"," Item entry 2"," item 3& #34;," something else"," something else duplicate"," item entry 1 dup"。我想搜索"第1项重复"。

LIKE语法对此没有多大帮助。我可以在搜索中的每个字符串后执行LIKE语法,但是,结果不会是最好的。如果我使用" OR",我会得到" something else duplicate"在" item 1 dup"之上。如果我做了一个AND,我就什么都得不到。

我的解决方案是从代码中进行合并。对搜索词中的每个字符串执行LIKE查询,存储结果,然后将它们合并在一起并按出现次数对其进行排序。但是,我想知道是否有一些东西可以直接从SQL查询中完成(并且更快)。

由于

1 个答案:

答案 0 :(得分:1)

解决这个问题的简单方法是:

  1. 通过空格/制表符/其他分隔符(例如preg_split('/[^A-Za-z0-9]/')
  2. )将查询字符串拆分为单词
  3. 获取唯一值array_unique
  4. 构造查询字符串,如:

    select id, count(*)
    from (
        select id from table
        where name like '%WORD1%'
        union all
        select id from table
        where name like '%WORD2%'
        ...
    )
    group by id
    order by 2 desc