2016-05-03 13 views
2

elasticsearchの助けを借りて最も近い価格/数を見つける可能性を探しています。問題は私に範囲がないことです。 私が達成したいのは、結果が最も近い距離でソートされていることです。検索クエリの例によると、私のインデックスには、以下の価格(数字)を持つ3つの文書が含まれています:elasticsearchでQuery DSLを使用して最も近い/近い番号を見つける方法

与えられた数字の検索値29からの "距離"は 45 - 29 = 16 | 27-29 = -2 | 32 - 29 = 3だから、私は期待しているのは、検索結果は、距離が与えられた価格から離れていることによって得点されるということです。

検索クエリの例:

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

そして、あなたはdynamic scriptingを有効にする必要があります:あなたが行くありElasticsearch scoring based on how close a number is to a query

+0

あなたが参照した投稿から実際の回答が得られます。それのどこが悪いんだい? –

+0

それはelasticsearchリファレンスに "ちょうど"リンクしていますが、例は提供していません:( – DaviideSnow

答えて

2

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

私は私の質問はこれと同様の問題に関連していると思います。

あなたは、また、この

"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

関連する問題