我有一个表格设置如下:
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在搜索的顶部,因为它匹配我在两个字段而不是一个字段的搜索。
谢谢!
答案 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对它们进行分组(每个匹配项目得到一个点)。