1

次の文書記事があります

{
    title: "Some title",
    authors: [
      { LastName: "Smith", Country: "US"},
      { LastName: "Smith", Country: "UK"},
    ]
}

著者のコレクションのプロパティ Country に基づいて、用語アグリゲーターを検索に追加したいと考えています。検索により、記事のリストとすべての異なる国の集計バケットが返されます。逆にネストされた集約が進むべき道のようですが、うまくいきません。

検索集計の出力は次のようになります。

"aggregations": {
  "countries": {
      "buckets": [{
        "key": "US",
        "doc_count": 1
      }, {
        "key": "UK",
        "doc_count": 1
      }]
    }
  }
4

1 に答える 1

1

ネストされた集計内の用語集計で、必要なものを取得できると思います。

次のような単純なインデックスを設定しました。

PUT /test_index
{
   "mappings": {
      "doc": {
         "properties": {
            "authors": {
               "type": "nested",
               "properties": {
                  "Country": {
                     "type": "string",
                     "index": "not_analyzed"
                  },
                  "LastName": {
                     "type": "string",
                     "index": "not_analyzed"
                  }
               }
            },
            "title": {
               "type": "string"
            }
         }
      }
   }
}

次に、いくつかのドキュメントを追加しました。

PUT /test_index/doc/1
{
    "title": "Some title",
    "authors": [
      { "LastName": "Smith", "Country": "US"},
      { "LastName": "Smith", "Country": "UK"}
    ]
}

PUT /test_index/doc/2
{
    "title": "another title",
    "authors": [
      { "LastName": "Jones", "Country": "SA"},
      { "LastName": "Jones", "Country": "UK"}
    ]
}

次に、次のクエリを実行しました。

POST /test_index/_search?search_type=count
{
   "aggs": {
      "authors": {
         "nested": {
            "path": "authors"
         },
         "aggs": {
            "author_countries": {
               "terms": {
                  "field": "authors.Country"
               }
            }
         }
      }
   }
}

あなたが望んでいたものを返すようです:

{
   "took": 3,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "failed": 0
   },
   "hits": {
      "total": 2,
      "max_score": 0,
      "hits": []
   },
   "aggregations": {
      "authors": {
         "doc_count": 4,
         "author_countries": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
               {
                  "key": "UK",
                  "doc_count": 2
               },
               {
                  "key": "SA",
                  "doc_count": 1
               },
               {
                  "key": "US",
                  "doc_count": 1
               }
            ]
         }
      }
   }
}

テストに使用したコードは次のとおりです。

http://sense.qbox.io/gist/ccf7bd9d05f646507b3316e985dd6a50e905aed3

于 2015-09-25T19:11:01.790 に答える