我正在使用Java API查询elasticsearch。我正在以这种方式构建查询:

SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index)
            .setQuery(query)
            .addFieldDataField("location")
            .addField("time")
            .addField("name");
SearchResponse resp = searchRequestBuilder.get();
for (SearchHit hit : resp.getHits().getHits()) {
   GeoPoint point = hit.field("location").getValue();
   // ... etc
}

有没有一种方法可以构建请求并仅获取所有字段而无需明确指定它们?视为HTTP接口(interface)不需要您执行此操作。

最佳答案

我不确定您使用的是哪种版本的ES和Java客户端,但是根据此javadoc:http://javadoc.kyubu.de/elasticsearch/HEAD/org/elasticsearch/action/search/SearchRequestBuilder.html#addFields(java.lang.String...),如果您未指定任何字段,则将返回文档的完整_source。

我还要注意的另一件事是,javadoc指定必须存储字段(除非您使用addFieldDataField)。确保在您的映射中未将其标记为已忽略。

10-06 09:01