gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:35:55 25 4
gpt4 key购买 nike

我有一个 Elasticsearch 索引,其中包含具有嵌套子元素作为属性的元素,例如。

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

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

Java API 的代码是:

 SearchResponse responseTests = client.prepareSearch("tests")
.addField("id")
.addField("name")
.addField("responsiblePerson")
.setQuery(QueryBuilders.matchQuery("id", testId))
.execute()
.actionGet();

SearchHits testHits = responseTests.getHits();

不幸的是,由于某种原因,此查询不起作用,因为 testHits.getTotalHits() 显示一个数字,但 testHits.getHits().length 为 0 :-(

有人提示我如何让它发挥作用吗?

最佳答案

“之所以无法获取嵌套对象的存储字段值,是因为它存储在单独的 Lucene 文档中。

如果在映射中启用嵌套,单个 ES 文档将存储为单独的 Lucene 文档。每个嵌套对象将是一个 Lucene 文档。主/根文档也将是一个单独的 Lucene 文档。 ES 总是将匹配项翻译回 Lucene 根文档。 _source 始终与根 Lucene 文档关联。当获取字段时,Lucene 根文档的转换已经发生,因此无法访问嵌套的存储字段,但可以访问 _source 中的值。

我不认为这是一个错误,而是 ES 目前如何处理嵌套文档的限制。一旦实现了 #3022,就可以访问嵌套 Lucene 文档的存储字段。”

你可以在这里找到它 https://github.com/elasticsearch/elasticsearch/issues/5245

关于java - ElasticSearch:在搜索结果中包含内部对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27898952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com