使用ES查询时只返回指定字段的三种方法

背景

最近在使用ES检索pdf、word等文件内容时查询发现返回的结果过于冗长,不好阅读,因为文件的内容占据的篇幅太大了,因而要设置返回字段。

在Elasticsearch(ES)中,当你执行查询时,通常希望只返回特定的字段,而不是整个文档的所有字段。这可以提高查询的响应速度,并减少数据传输量。 以下是如何在ES查询中只返回指定字段的方法:

三种实现方法

1. 使用_source字段过滤

你可以通过_source字段来指定需要返回的字段。在查询请求体中,将_source设置为一个包含所需字段名的数组。例如,如果你只想返回titlechannel字段,你的查询可能如下所示:

json 复制代码
GET /your_index/_search
{
  "_source": ["title", "author"],
  "query": {
    "match_all": {}
  }
}

在这个例子中,your_index是你要查询的索引名。match_all查询是一个简单的查询,它会匹配索引中的所有文档。通过_source字段,我们告诉ES只返回titleauthor等字段。

还可以反向操作,除了什么字段以外全都返回,这样可以避免写很多自己需要的字段:

http 复制代码
GET /docwrite/_search
{
  "query": {
    "match": {
      "attachment.content": {
        "query": "主机配置",
        "analyzer": "ik_smart"
      }
    }
  },
  "_source": {
    "excludes": "attachment"
  }
}

如此,返回的结果就只有除了附件以外的字段内容了:

2. 使用source_filtering参数

在某些情况下,你也可以使用source_filtering参数来包含或排除特定字段。这通常在使用high level REST客户端或某些特定的客户端库时可用。你可以指定一个包含字段名的数组来只包含这些字段,或者指定一个排除字段名的数组来排除这些字段。

3. 使用SourceFilter在Java客户端中

如果你使用的是Elasticsearch的Java客户端,你可以使用SourceFilter来过滤返回的字段。例如:

java 复制代码
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.fetchSource(new String[]{"title", "channel"}, null);
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
SearchRequest searchRequest = new SearchRequest("your_index");
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

在这个Java示例中,fetchSource方法用于指定要返回的字段。第一个参数是一个包含所需字段名的数组,第二个参数(这里是null)是一个包含要排除的字段名的数组。然后,我们构建一个match_all查询,并将其添加到搜索源构建器中。最后,我们执行搜索请求并获取响应。

注意

请注意,根据你的具体需求和使用的Elasticsearch版本或客户端库,上述方法可能会有所不同。

结语

只返回需要的字段可以大大减少从ES中检索和传输的数据量。这能够显著提高查询的响应速度,特别是在处理大量数据或网络带宽有限的情况下。

对于客户端或应用程序来说,只接收和处理必要的字段可以减少所需的存储空间和内存使用量。这有助于降低系统资源消耗,提高整体效率。

相关推荐
Elastic 中国社区官方博客3 小时前
当 TSDS 遇到 ILM:设计不会拒绝延迟数据的时间序列数据流
大数据·运维·数据库·elasticsearch·搜索引擎·logstash
沐风___3 小时前
Claude Code 权限模式完全指南:Auto、Bypass、Ask 三模式深度解析
大数据·elasticsearch·搜索引擎
色空大师8 小时前
网站搭建实操(八)后台管理-搜索服务
java·elasticsearch·搭建网站·论坛
Elastic 中国社区官方博客8 小时前
使用 Elastic Workflows 监控 Kibana 仪表板视图
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索·kibana
切糕师学AI11 小时前
Elasticsearch 列式存储详解:Doc Values 的原理与实践
大数据·elasticsearch·搜索引擎·列式存储
色空大师13 小时前
【ElasticSearch(ES)】安装及介绍
大数据·elasticsearch·搜索引擎·搜索
腾讯云大数据14 小时前
腾讯云ES AI搜索最佳实践:基于ES与Dify的企业级RAG应用方案
大数据·人工智能·elasticsearch·云计算·腾讯云
切糕师学AI14 小时前
Elasticsearch 中的聚合(Aggregations)技术详解
大数据·elasticsearch·搜索引擎
Mapleay14 小时前
Ubuntu24.04安装python2
大数据·elasticsearch·搜索引擎
leo_messi9417 小时前
2026版商城项目--高级篇(一)-- ElasticSearch
大数据·elasticsearch·搜索引擎