MySQL - 按相关性排序的搜索/ SELECT?

时间:2011-06-17 19:44:26

标签: php mysql sql

我有一个表格设置如下:

 userid year  model  color  transmission  interiorcolor wheels
-------------------------------------------------------------------
   1   2005  Fiesta   Red   MT             Black        Stock
   2   2008  Monaro   Red   AT             Black        Stock
   3   2005  F-150S   Blue   AT            Black + Red  Stock
   4   2008  Fiesta   Green   MT           Black        Stock

现在我正在构建一个SQL搜索(在全文搜索中没有标准版本),我希望结果有点相关。

我的意思是,例如,如果有人输入“2008 Fiesta”,现在有一个基本查询,结果按此顺序出现

id#1,id#2,id#4

但在这种情况下我真的希望#4在搜索的顶部,因为它匹配我在两个字段而不是一个字段的搜索。

谢谢!

3 个答案:

答案 0 :(得分:1)

你可能想看一下使用Lucene(或者在Lucene之上的SOLR),而不是像这样依赖MySQL。您仍然可以将您的真实数据存储在MySQL中。我使用的一般设置是SOLR / Lucene进行全文/相关性搜索以获取我感兴趣的实体的ID,然后命中MySQL以获取这些实体的实际数据。使用SOLR / Lucene可以为您提供全文搜索功能,并且可以通过搜索/订购数据的方式增加更多功能,此外还可以提供词干等功能。

答案 1 :(得分:0)

我认为您的select声明就像:

LIKE %2008 Fiesta%

尝试使用上一个%,它会起作用

答案 2 :(得分:0)

这很粗糙,但应该对你有用:

SELECT id, SUM(Relevance) as SearchRelevance
FROM(
SELECT id, 1 as Relevance
FROM cars
WHERE year = 2008
UNION ALL
SELECT id, 1 as Relevance
FROM cars
WHERE model='Fiesta') AS t
GROUP BY id
ORDER BY SUM(Relevance) DESC

基本上它搜索每个标准,将它们全部联合起来然后按相关性的SUM对它们进行分组(每个匹配项目得到一个点)。