[英]MySQL - Search/SELECT which is ordered by relevance?
我的表設置如下:
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處於搜索的頂部,因為它與我在兩個字段而不是一個字段上的搜索匹配。
謝謝!
您可能想看看使用Lucene(或在Lucene之上的SOLR),而不是依靠MySQL這樣的東西。 您仍然可以將實際數據存儲在MySQL中。 我使用的常規設置是SOLR / Lucene進行全文搜索/相關性搜索,以獲得我感興趣的實體的ID,然后點擊MySQL來獲取這些實體的實際數據。 使用SOLR / Lucene可以為您提供全文搜索,並以搜索/排序數據的方式增加了很多功能,此外還提供了詞干等功能。
我認為您的select
語句如下:
LIKE %2008 Fiesta%
嘗試服用最后的%
,它將起作用
這很粗糙,但它應該為您工作:
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
基本上,它會搜索每個條件,將它們全部合並在一起,然后按相關性總和對它們進行分組和排序(每個匹配項可得1分)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.