首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Elasticsearch Java API检索特定字段

使用Elasticsearch Java API检索特定字段
EN

Stack Overflow用户
提问于 2015-05-27 16:00:32
回答 1查看 25.1K关注 0票数 18

我正在使用Java API for Elasticsearch。将实体保存到索引中后,可以将它们与完整的源代码一起检索。但是,我只想检索选定的字段,这是不起作用的。

下面是示例代码:

代码语言:javascript
复制
SearchResponse response = client.prepareSearch("my-index")
   .setTypes("my-type")
   .setSearchType(SearchType.QUERY_AND_FETCH)
   .setFetchSource(true)
   .setQuery(QueryBuilders.termsQuery("field1", "1234"))
   .addFields("field1")
   .execute()
   .actionGet();

for (SearchHit hit : response.getHits()){
   Map<String, SearchHitField> fields = hit.getFields();
   System.out.println(fields.size());
   Map map = hit.getSource();
   map.toString();
}

将从索引中检索正确的实体,包括完整的源。

例如,这是响应的一个片段:

代码语言:javascript
复制
"hits" : {
  "total" : 1301,
  "max_score" : 0.99614644,
  "hits" : [ {
  "_index" : "my-index",
  "_type" : "my-type",
  "_id" : "AU2P68COpzIypBTd80np",
  "_score" : 0.99614644,
  "_source":{"field1":"1234", ...}]}
}, {

然而,当response.getHits()返回预期的命中数时,每个命中的fieldssource都是空的。

我希望每个命中都包含行中指定的字段:

代码语言:javascript
复制
.addFields("field1")

注释掉这行

代码语言:javascript
复制
.setFetchSource(true)

将导致响应根本不包括源。

Elasticsearch版本为1.5.0

以下是Java API的maven依赖项:

代码语言:javascript
复制
<dependency>
   <groupId>com.sksamuel.elastic4s</groupId>
   <artifactId>elastic4s_2.11</artifactId>
   <version>1.5.5</version>
</dependency>

显然,出于性能原因,我不想检索完整的实体。有人知道如何将检索限制在选定的字段中吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-05-27 16:08:03

您可以使用setFetchSource(String[] includes, String[] excludes) method指定所需的字段。试试这个吧

代码语言:javascript
复制
SearchResponse response = client.prepareSearch("my-index")
   .setTypes("my-type")
   .setSearchType(SearchType.QUERY_AND_FETCH)
   .setFetchSource(new String[]{"field1"}, null)
   .setQuery(QueryBuilders.termsQuery("field1", "1234"))
   .execute()
   .actionGet();

for (SearchHit hit : response.getHits()){
   Map map = hit.getSource();
   map.toString();
}

map将只包含您指定的字段。

请注意,.setFetchSource("field1", null) (如果需要单个字段)或.setFetchSource("field*", null) (如果需要多个通配符字段)也可以使用。

票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30476493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档