【问题标题】:Writing sql search engine query编写sql搜索引擎查询
【发布时间】:2014-01-10 11:41:16
【问题描述】:

我正在尝试编写一个脚本,该脚本使用用户提供的每个查询词在数据库中进行搜索。

例如查询可以是: “耐克黑帽”

在我的脚本中,字符串被 PHP 用空格分割,然后以这种形式传递给 SQL 查询:

   foreach($query as $word)
   {
        $searchQuery[] = " title ILIKE '%".$word."%' ESCAPE '|'  ";
   }

问题是这些查询能够找到像 semi*Black* 或 *Hat*ed 这样的词。我不希望这样,所以我所做的是添加空格:

WHERE title ILIKE '% ".$word." %' ESCAPE '|' 

现在的问题是,如果用户查询的是“Nike red shorts”,脚本将找不到任何内容,因为“Nike”在数据库中之前没有空格。我不知道如何解决它 - 只能通过整个单词找到,包括不以空格开头或结尾的单词。

【问题讨论】:

    标签: php sql postgresql search-engine


    【解决方案1】:

    您可以在搜索词之前以及模式之后附加一个空格:

    WHERE ' '||title||' ' ILIKE '% ".$word." %' ESCAPE '|' 
    

    【讨论】:

      【解决方案2】:

      对这类工作使用 PostgreSQL 的全文搜索支持。

      full text search。显然,Rails 对它的支持非常好,但我不会说 Rails,也找不到任何好的链接。

      在 SQL 中,它会是这样的:

      to_tsvector(title) @@ to_tsvector('Nike Black Hat')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多