首页 > 解决方案 > 无法获得使用桶聚合的任何结果

问题描述

我的 ES 中有一些 PR 数据。这就是文档的建模方式

 {
          "Author" : "dheerajrav",
          "Date" : "2012-10-05T10:16:49Z",
          "Number" : 2554441,
          "IsMerged" : false,
          "MergedBy" : "",
          "Body" : ""
        },
        {
          "Author" : "dheerajrav",
          "Date" : "2012-10-05T09:11:35Z",
          "Number" : 2553883,
          "IsMerged" : false,
          "MergedBy" : "",
          "Body" : ""
        },
        {
          "Author" : "crodjer",
          "Date" : "2012-10-04T15:40:22Z",
          "Number" : 2544540,
          "IsMerged" : false,
          "MergedBy" : "",
          "Body" : ""
        },
        {
          "Author" : "crodjer",
          "Date" : "2012-10-04T07:52:20Z",
          "Number" : 2539410,
          "IsMerged" : false,
          "MergedBy" : "",
          "Body" : ""
        }
      .
      .
      .
      ]
    }

我正在我的索引上尝试以下术语 agg 但我没有得到任何结果

curl -X GET "localhost:9200/newidx/_search?pretty" -H 'Content-Type: application/json' -d'               
{
"aggs" : {
    "contributors" : {
        "terms" : {
            "field" : "Author",
            "size" : 100
        }
    }
  }
}
'

期望的结果是为每个 PR 作者提供单独的存储桶。这是回应

 "aggregations" : {
 "contributors" : {
  "doc_count_error_upper_bound" : 0,
  "sum_other_doc_count" : 0,
  "buckets" : [ ]
   }
  }

我的数据建模错了吗?

这是我的索引的映射

{
  "newidx" : {
   "mappings" : {
     "properties" : {
         "Stats" : {
          "properties" : {
           "Author" : {
             "type" : "text",
              "fields" : {
               "keyword" : {
                  "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "Body" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "Date" : {
          "type" : "date"
        },
        "IsMerged" : {
          "type" : "boolean"
        },
        "MergedBy" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "Number" : {
          "type" : "long"
           }
         }
       }
     }
    }
 }
}

我在我的代码中生成一个 json 文件并使用 elasticsearch_loader 将其索引到 elasticsearch,这是命令

elasticsearch_loader --es-host 'localhost' --index org-skills --type incident json --lines processed.json

标签: elasticsearchelasticsearch-aggregation

解决方案


根据您的映射:

  1. Author字段被声明为text(用于全文搜索)和keyword(用于匹配整个值)。

    text读取v/skeyword之间的差异。

  2. 父映射名称是Stats

因此,您应该Stats.Author.keyword在聚合查询中使用,即:

curl -X GET "localhost:9200/newidx/_search?pretty" -H 'Content-Type: application/json' -d'               
{
"aggs" : {
    "contributors" : {
        "terms" : {
            "field" : "Stats.Author.keyword",
            "size" : 100
        }
    }
  }
}
'

推荐阅读