2014-10-28 124 views
4

對於項目,我需要選擇過濾器邊界內和最接近數字值的文檔。這是一個價格,我似乎無法找到這是否可能。在ElasticSearch的數值字段上按距離排序

說我有2個文件:

{ 
    "name": "Document1", 
    "price": 46.12, 
    "tags": ["tag1", "tag2"] 
} 
{ 
    "name": "Document2", 
    "price": 82.29, 
    "tags": ["tag1", "tag3"] 
}  

是否有可能獲得與最接近66.23的價格文件?

+1

如果您的羣集中啓用了動態腳本,您可以使用基於腳本的排序:基於絕對差異進行排序http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-sort.html #_script_based_sorting – keety 2014-10-28 20:20:11

+0

這不是,但我啓用它,因爲ES只能通過我們軟件的私有部分訪問,所以看起來相對安全。我目前使用這樣的: { 「查詢」:{ ... }, 「排序」:{ 「_script」:{ 「腳本」:「CUR =(因子 - DOC ['有效載荷'age'] .value; if(cur <0){cur = cur * -1} else {cur = cur}「, 」type「:」number「, 」params「:{ 」factor「 45 }, 「order」:「asc」 } } } – 2014-10-29 07:22:28

回答

5

答案(感謝keety)是使動態腳本,並添加排序方法是這樣的:從最接近

{ 
    "query": { 
     "filtered" : { 
      "query":{ 
       "match_all" : { } 
      }, 
      "filter": {} 
     } 
    }, 
    "sort" : { 
     "_script" : { 
      "script" : "cur = (factor - doc['age'].value); if (cur < 0) { cur = cur * -1 } else { cur = cur}", 
      "type" : "number", 
      "params" : { 
       "factor" : 45 
      }, 
      "order" : "asc" 
     } 
    } 
} 

這種種到最遠,就像一個魅力。謝謝!

+0

很高興它工作正常 – keety 2014-10-29 14:05:00