Java ElasticSearch:在搜索结果中包含内部对象
我有一个弹性搜索索引,它包含一些元素,这些元素的属性是嵌套的子元素,例如。 现在,我想在查询结果中显式地包含一些字段(例如,从结果中排除listOfSubitems以减小其大小;这也是我不想回到_source属性的原因) java API的代码是:Java ElasticSearch:在搜索结果中包含内部对象,java,
elasticsearch,Java,
elasticsearch,我有一个弹性搜索索引,它包含一些元素,这些元素的属性是嵌套的子元素,例如。 现在,我想在查询结果中显式地包含一些字段(例如,从结果中排除listOfSubitems以减小其大小;这也是我不想回到_source属性的原因) java API的代码是: SearchResponse-responseTests=client.prepareSearch(“测试”) .addField(“id”) .addField(“名称”) .addField(“负责人”) .setQuery(QueryBuil
SearchResponse-responseTests=client.prepareSearch(“测试”)
.addField(“id”)
.addField(“名称”)
.addField(“负责人”)
.setQuery(QueryBuilders.matchQuery(“id”,testId))
.execute()
.actionGet();
SearchHits testHits=responseTests.getHits()
不幸的是,由于某些原因,此查询无法工作,因为testHits.getTotalHits()显示一个数字,但testHits.getHits()显示一个数字。长度为0:-(
是否有人给我一个提示,告诉我如何让它工作?“无法获取嵌套对象的存储字段值的原因是因为它存储在单独的Lucene文档中
如果在映射中启用了嵌套,则单个ES文档将存储为单独的Lucene文档。每个嵌套对象将是单个Lucene文档。主/根文档也将是单独的Lucene文档。ES将始终将匹配项转换回根Lucene文档。源始终与根Lucene文档关联。在获取字段时,已将其转换为Lucene根文档,因此无法访问嵌套存储的字段,但可以从_源访问值
我不认为这是一个bug,而是ES当前如何处理嵌套文档的限制。一旦实现了#3022,就可以访问嵌套Lucene文档的存储字段。”
您可以在这里找到./p>您可以考虑将“大小”参数添加到查询中,但是如果这不起作用,也检查是否只有查询有效(返回所有文档)。如果它仍然没有返回所有文档,则问题出现在筛选部分。编辑:我没有看到您的术语字段。这可能是问题所在!感谢您的反馈-是的,如果我省略“.addField”(“responsiblePerson”)”,查询会起作用。我想我不需要术语字段,因为我需要匹配查询?!非常感谢您的解释!
{
_index: tests,
_type: test,
_id: 11021,
_version: 1,
_score: 1,
_source: {
id: 11021,
name: "demotest",
responsiblePerson: {
userId: "221",
userName: "Walter",
userSurName: "White",
userEmail: "Walter.White@lospollos.com"
},
listOfSubItems: [{"name": "location"},{"name":"sample"},{"name":"experiment"}]
}
}