2016-12-07 48 views
1

我收到了一個電子商務網站,其中列出了產品。該列表可以按名稱,品牌或價格排序。按條目列表排序首先使用ElasticSearch

現在我想提供一個功能,用戶可以在其中定義首選品牌列表。這些品牌應該首先顯示在列表的頂部,與其他排序參數無關。用戶喜歡'SRAM'和'Shimano'品牌。按價格排序的查詢示例如下所示:

<Brand> <Price(desc)> 
SRAM  99.00 
Shimano 95.00 
SRAM  87.50 
SRAM  67.90 
Shimano 59.90 
AVID  125.90 
RaceFace 115.90 
ENVE  70.00 
RaceFace 63.60 

我知道我可以進行多級排序。我認爲這是一個排序問題,而不是另一個功能。所以我正在尋找一種排序方式,其中一部分條款將首先顯示,然後第二級我可以使用價格排序,我已經工作。任何人都可以指出我稱之爲什麼?

回答

1

您可以使用function score

GET /_search 
{ 
    "query": { 
     "function_score": { 
      "query": { "match_all": {} }, 
      "boost": "5", 
      "functions": [ 
       { 
        "filter": { "match": { "BRAND": "Sram" } }, 
        "weight": 2 
       }, 
       { 
        "filter": { "match": { "BRAND": "shimano" } }, 
        "weight": 3 
       } 
      ], 
      "score_mode": "max", 
      "boost_mode": "multiply", 
     } 
    } 
} 
+0

謝謝你,這顯然是做它的方式。我可以在'function_score'包裝中使用我現有的查詢嗎? –

+0

@JanDetlefsen當然你可以做到這一點 –

+0

@JanDetlefsen但是,可能有一個訣竅是提升文檔,它們必須通過查詢返回。我的意思是,例如,如果你的查詢是按品牌過濾:「stackoverflow」,但你是提高sram和shimano他們可能不會返回,因爲基本查詢過濾它們。但是,這個你應該嘗試:) –