2016-09-05 8 views
0

私のすべてのユーザーには、それらに関連付けられた都市があり、集計を行っています。私はいつもUnspecifiedフィールドを集計応答から返して、自分の都市に入っていないユーザーを取得します。カウントがトップ10にあるかどうかにかかわらず、結果として常にUnspecifiedを得る方法はありますか?都市の数が非常に大きいので、私はちょうどUnspecifiedの数を得るためにそれらのすべてを照会したくありません。弾性検索集計:用語集のフィールドを常に返します

データスキーマです:

"mappings": { 
    "users": { 
     "dynamic": "false", 
     "_all": { 
      "enabled": false 
     }, 
     "properties": { 
      "city": { 
       "properties": { 
       "geopoint": { 
        "type": "geo_point" 
       }, 
       "name": { 
        "type": "string", 
        "index": "not_analyzed" 
       } 
       } 
      }, 
      "id": { 
       "type": "integer" 
      } 
     ...} 

集約私がやっている:

{ 
    "aggs" : { 
    "cities" : { 
     "terms" : { "field" : "city.name" } 
    } 
    } 
} 

は、私はいくつかの他のクエリとフィルタを持っています。この集約は正常に動作します。私はトップ10都市のリストを取得しますが、私はまたUnspecified

期待される結果の数があるた:

"aggregations" : { 
    "cities" : { 
     "buckets" : [ 
      { 
       "key" : "New York", 
       "doc_count" : 120 
      }, 
      { 
       "key" : "Chicago", 
       "doc_count" : 50 
      }, 
      . 
      . 
      . 
      { 
       "key" : "Unspecified", 
       "doc_count" : 4 
      }, 
     ] 
    } 
} 
+1

いくつかのサンプル文書と期待される集計結果を表示できますか? – Val

+0

https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-exists-query.html not existsクエリでデータをフィルタリングし、それらを集計することができます。 – hkulekci

+0

@Valデータマッピングと期待される結果を追加しました – Pooja

答えて

0

あなたはterms凝集のmissing value設定を活用することができます。指定されたフィールドに用語が含まれていないすべての文書を収集するバケットのキーを指定するだけです:

{ 
    "aggs" : { 
    "cities" : { 
     "terms" : { 
      "field" : "city.name", 
      "missing": "Unspecified"     <--- add this 
     } 
    } 
    } 
} 
+0

ありがとうございます。行方不明を追加すると、それがトップ10にあるかどうかにかかわらず、レスポンスで返されます。それを知らなかった。再度、感謝します。 – Pooja

+0

クール、嬉しい助け! – Val

関連する問題