elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java ElasticSearch:在搜索结果中包含内部对象

Java ElasticSearch:在搜索结果中包含内部对象,java,elasticsearch,Java,elasticsearch,我有一个弹性搜索索引,它包含一些元素,这些元素的属性是嵌套的子元素,例如。 现在,我想在查询结果中显式地包含一些字段(例如,从结果中排除listOfSubitems以减小其大小;这也是我不想回到_source属性的原因) java API的代码是: SearchResponse-responseTests=client.prepareSearch(“测试”) .addField(“id”) .addField(“名称”) .addField(“负责人”) .setQuery(QueryBuil

我有一个弹性搜索索引,它包含一些元素,这些元素的属性是嵌套的子元素,例如。

现在,我想在查询结果中显式地包含一些字段(例如,从结果中排除listOfSubitems以减小其大小;这也是我不想回到_source属性的原因)

java API的代码是:

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"}]
    }
}