ElasticSearch:在搜索结果中包含内部对象
ElasticSearch: Include inner object in search result
我有一个弹性搜索索引,其中包含具有嵌套子元素作为属性的元素,例如。
{
_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
我有一个弹性搜索索引,其中包含具有嵌套子元素作为属性的元素,例如。
{
_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