我正在为FAQ列表编写一些非常简单的搜索功能。我将搜索字符串分割为各种字符,包括空格。然后进行选择沿计数和顺序通过Where子句匹配
SELECT *
FROM "faq"
WHERE
((LOWER("Question") LIKE '%what%'
OR LOWER("Question") LIKE '%is%'
OR LOWER("Question") LIKE '%a%'
OR LOWER("Question") LIKE '%duck%'))
我有过的线稍微修改成我们的数据访问层的产生,但它应该给你什么事的想法。
上述查询很好地证明了这个问题,因为大多数问题都可能包含单词a或其中的单词,但是我无法将其过滤出来,因为首字母缩写词对于搜索者来说可能很重要。建议的是我们按匹配关键字的数量排序。然而,我一直无法找到一种在SQL中这样做的方法(我们没有时间创建一个带有关键字索引的简单搜索引擎等)。有谁知道是否有一种方法可以计算SQL语句中LIKE匹配的数量并按此顺序进行排序,以便最多关键字的问题出现在结果的顶部?
感谢PgAdmin似乎完美的工作。我们使用称为Entityspaces的数据访问层来为我们清理数据。但是,我们可能必须自己构建此查询,因此将谨慎行事:) – ClearCarbon 2011-12-16 13:37:06