2016-05-03 154 views
2

我正在尋找一種可能性,在elasticsearch的幫助下找到最接近的價格/數量。問題是我沒有範圍。 我想實現的是結果按最近距離排序。根據示例搜索查詢,我的索引包含以下價格(數字)的3個文檔:45,27,32如何在elasticsearch中使用查詢DSL查找最近/最接近的數字

對於給定數字,我的搜索值29的「距離」爲 45 - 29 = 16 | 27 - 29 = -2 | 32 - 29 = 3所以我期望的是,搜索結果是通過數字遠離給定價格的「距離」得分。

搜索查詢例如:

GET myawesomeindex/_search 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "description": "this is the text i want to find" 
      } 
     }, 
     { 
      "match": { 
      "price": 29 
      } 
     } 
     ] 
    } 
    } 
} 

我想我的問題是與此相關的類似的問題:Elasticsearch scoring based on how close a number is to a query

+0

你引用的帖子給你的實際答案。那有什麼問題? –

+0

它只是鏈接到elasticsearch的參考,但沒有提供一個例子:( – DaviideSnow

回答

2

你去那裏:

"sort": { 
    "_script": { 
     "type": "number", 
     "script": "return doc['price'].value-distance", 
     "params": { 
     "distance": 29 
     }, 
     "lang": "groovy", 
     "order": "desc" 
    } 
    } 

而且你需要啓用dynamic scripting

可以,另外,像這樣做

"query": { 
    "function_score": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "description": "this is the text i want to find" 
       } 
      }, 
      { 
       "match": { 
       "price": 29 
       } 
      } 
      ] 
     } 
     }, 
     "functions": [ 
     { 
      "exp": { 
      "price": { 
       "origin": "29", 
       "scale": "1", 
       "decay": 0.999 
      } 
      } 
     } 
     ] 
    } 
    } 

但是,這將改變score本身。如果你想按距離進行純粹的排序(而沒有別的),那麼我相信第一個選項是最好的。

+0

非常感謝你提供了這個非常詳細的答案,以及在congig中啓用腳本的提示!它幫助了我很多。 – DaviideSnow