在 Elasticsearch 的 Java API 中,要仅返回查询结果中的特定字段,可以使用 FetchSourceContext
和 SourceFilter
来实现。以下是几种实现方式:
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.Strings;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
// 创建搜索请求
SearchRequest searchRequest = new SearchRequest("your_index_name");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 设置查询条件
sourceBuilder.query(QueryBuilders.matchAllQuery());
// 设置返回的字段
String[] includeFields = new String[] {"field1", "field2"};
String[] excludeFields = new String[] {};
FetchSourceContext fetchSourceContext =
new FetchSourceContext(true, includeFields, excludeFields);
sourceBuilder.fetchSource(fetchSourceContext);
searchRequest.source(sourceBuilder);
// 执行查询
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.elasticsearch.search.fetch.subphase.FieldAndFormat;
// 创建搜索请求
SearchRequest searchRequest = new SearchRequest("your_index_name");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 设置查询条件
sourceBuilder.query(QueryBuilders.matchAllQuery());
// 设置返回的字段
sourceBuilder.fetchSource(
new FetchSourceContext(true, new String[]{"field1", "field2"}, new String[]{})
);
searchRequest.source(sourceBuilder);
// 执行查询
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
// 只包含field1和field2,排除其他字段
sourceBuilder.fetchSource(new String[]{"field1", "field2"}, null);
SearchRequest searchRequest = new SearchRequest("your_index_name");
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
// 添加需要返回的字段
sourceBuilder.fetchField("field1");
sourceBuilder.fetchField("field2");
SearchRequest searchRequest = new SearchRequest("your_index_name");
searchRequest.source(sourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
"parent.child"
FetchSourceContext
时,第一个参数表示是否启用源过滤includes
设为 null,excludes
设为要排除的字段数组以上方法都可以实现在查询结果中仅返回指定的字段,减少网络传输和提高查询效率。
没有搜到相关的沙龙