You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Elasticsearch中查询指定字段下的所有内容取值

ES查询指定字段所有取值的实现方案

你可以根据是否需要去重选择对应方案,你的field2字段为keyword类型,无需额外处理字段名即可直接查询:


方案1:获取去重后的field2所有取值

使用Terms聚合查询,直接返回所有唯一值,符合你给出的示例输出格式要求:

DSL语句

GET indexname/_search
{
  "size": 0,
  "aggs": {
    "all_field2": {
      "terms": {
        "field": "field2",
        "size": 10000
      }
    }
  }
}

注:如果field2的唯一取值总数超过10000,调大size参数的数值即可。

Python实现代码

from elasticsearch import Elasticsearch

# 初始化ES客户端,替换为你自己的ES连接配置
es = Elasticsearch(hosts=["http://127.0.0.1:9200"])

resp = es.search(
    index="indexname",
    size=0,
    aggs={
        "all_field2": {
            "terms": {
                "field": "field2",
                "size": 10000
            }
        }
    }
)

# 提取结果为数组格式
field2_values = [bucket["key"] for bucket in resp["aggregations"]["all_field2"]["buckets"]]
print(field2_values)

输出结果即为你需要的["123", "654", "gfr"]格式。


方案2:获取所有文档的field2原始值(保留重复)

如果需要保留所有文档的字段值(包括重复项),可通过过滤返回字段的方式查询:

DSL语句

GET indexname/_search
{
  "_source": ["field2"],
  "query": {
    "match_all": {}
  },
  "size": 10000
}

注:如果文档总数超过10000,不要直接调大size,改用滚动查询或者search_after批量拉取即可。

Python实现代码

from elasticsearch import Elasticsearch

es = Elasticsearch(hosts=["http://127.0.0.1:9200"])

resp = es.search(
    index="indexname",
    _source=["field2"],
    query={"match_all": {}},
    size=10000
)

field2_values = [hit["_source"]["field2"] for hit in resp["hits"]["hits"]]
print(field2_values)

内容的提问来源于stack exchange,提问作者stanvooz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:15:03