我正在尝试使用用户提供的每个查询单词编写一个在数据库中搜索的脚本。
例如查询可以是: “耐克黑帽”
在我的脚本中,字符串由PHP按空格分割,然后以该格式传递给SQL查询:
foreach($query as $word)
{
$searchQuery[] = " title ILIKE '%".$word."%' ESCAPE '|' ";
}
问题是那些查询能够找到像半* 黑色 *或* Hat * ed这样的单词。我不希望这样,我所做的就是添加空格:
WHERE title ILIKE '% ".$word." %' ESCAPE '|'
现在的问题是,如果用户查询是“Nike red shorts”,脚本将找不到任何内容,因为“Nike”在数据库之前没有空格。我不知道如何解决它 - 只能通过包括不以空格开头或结尾的单词的整个单词来查找。
答案 0 :(得分:1)
您可以在搜索词之后以及模式之前追加空格:
WHERE ' '||title||' ' ILIKE '% ".$word." %' ESCAPE '|'
答案 1 :(得分:0)
使用PostgreSQL对此类工作的全文搜索支持。
见full text search。有很好的Rails支持它显然,但我真的不会说Rails,也找不到任何好的链接。
在SQL中,它类似于:
to_tsvector(title) @@ to_tsvector('Nike Black Hat')