【问题标题】:How to get at least 1 document of each values?如何获得每个值的至少 1 个文档?
【发布时间】:2017-12-20 11:12:25
【问题描述】:

我想为我放入数组中的每个“adminId”获取列表 1 文档。

这不是用户索引,所以我为每个用户有多个文档。

这是我尝试过的,但我得到了多个具有相同 adminId 的文档,并且有些文档丢失了:

{
  size: 10,
  query: {
    bool: {
      must: [
        {
          terms: {
            adminId: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
          }
        }
      ]
    }
  }
}

如何告诉 ES“为我给你的每个值获取至少 1 个文档”?

【问题讨论】:

标签: elasticsearch


【解决方案1】:

如何为每个给定的存储桶获取(任何)一个文档?

按照 OP 的建议使用 top hits aggregatn

curl -H 'Content-Type: application/json' localhost:9200/myindex/_search?pretty  -d '
{
   "size": 0,
   "query": {
      "bool": {
         "must": {
            "terms": {
               "adminId": ["CA", "NY", "TX"]
            }
         }
      }
   },
   "aggs": {
      "aggregation_name_1": {
         "terms": {
            "size": 10000,
            "field": "adminId"
         },
         "aggs": {
            "aggregation_name_2": {
               "top_hits": {
                  "size": 1
               }
            }
         }
      }
   }
}
'

注意

  • "size": 10000 表示我们需要10000 存储桶的数据(不同的adminId 值)。如果您有更多存储桶,请调整此值。

  • "size": 1 表示对于每个存储桶,返回(任何)一个文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多