【发布时间】:2018-09-28 00:20:44
【问题描述】:
我正在为 Elastic Search 6.2.2 使用高级 REST 客户端。假设我在索引“DOCUMENTS”中有两个文档,类型为“DOCUMENTS”,它们是
{
"_id": 1,
"Name": "John",
"FunFacts": {
"FavColor": "Green",
"Age": 32
}
},
{
"_id": 2,
"Name": "Amy",
"FunFacts": {
"FavFood": "Pizza",
"Age": 33
}
}
我想找出所有不同的有趣事实及其不同的价值,最终返回
{
"FavColor": ["Green"],
"Age": [32, 33],
"FavFood": ["Pizza"]
}
这可以要求对 Elastic Search 进行多个查询,但我更喜欢只有一个查询。此外,Elastic Search 索引可能会变得相当大,因此我必须在 ES 实例上强制执行尽可能多的操作。
此代码似乎生成了一个仅包含 FunFacts 的文档列表,但我仍必须自己执行聚合,这非常非常不理想。
SearchRequest searchRequest = new SearchRequest("DOCUMENTS");
searchRequest.types("DOCUMENTS");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
String [] includes = new String[1];
includes[0] = "FunFacts";
String [] excludes = new String[1];
excludes[0] = "Name";
searchSourceBuilder.fetchSource(includes, excludes);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse =
restHighLevelClient.search(searchRequest);
谁能指出我正确的方向?我注意到几乎所有的 Elastic Search 文档都以 curl 命令的形式出现,这对我没有帮助,因为我不够精通将这些命令翻译成 JAVA。
这是你的情节转折。由于允许用户决定他们的有趣事实,我们无法提前知道FunFacts Map 中的键是什么。 :/
谢谢, 马特
【问题讨论】:
标签: elasticsearch solr elasticsearch-5 spring-data-elasticsearch elasticsearch-6