elasticsearch - ElasticSearch: 搜索并返回嵌套类型

  显示原文与译文双语对照的内容
0 0

对于 ElasticSearch,我非常新,在使用嵌套映射/查询时遇到问题。

我的索引中添加了以下数据结构:

{
"_id":"3",
"_rev":"6-e9e1bc15b39e333bb4186de05ec1b167",
"skuCode":"test",
"name":"Dragon vol. 1",
"pages": [
 {
"id":"1", 
"tags": [
 {
"name":"dragon"
 },
 {
"name":"japonese"
 }
 ]
 },
 {
"id":"2", 
"tags": [
 {
"name":"tagforanotherpage"
 }
 ]
 }
 ]
}

这里索引映射定义为波纹管:

{
"metabook" : {
"metabook" : {
"properties" : {
"_rev" : {
"type" :"string"
 },
"name" : {
"type" :"string"
 },
"pages" : {
"type" :"nested",
"properties" : {
"tags" : {
"properties" : {
"name" : {
"type" :"string"
 }
 }
 }
 }
 },
"skuCode" : {
"type" :"string"
 }
 }
 }
 }
}

我的目标是搜索包含特定标记的所有页面,并返回已经筛选页面列表( 我希望ES返回与给定标签匹配的页面)的图书对象。 类似于( 忽略第二页):

{
"_id":"3",
"_rev":"6-e9e1bc15b39e333bb4186de05ec1b167",
"skuCode":"test",
"name":"Dragon vol. 1",
"pages": [
 {
"id":"1", 
"tags": [
 {
"name":"dragon"
 },
 {
"name":"japonese"
 }
 ]
 }
 ]
}

以下是我实际使用的查询:

{
"from": 0,
"size": 10,
"query" : {
"nested" : {
"path" :"pages",
"score_mode" :"avg",
"query" : {
"term" : {"tags.name" :"japonese" }
 }
 }
 }
}

但它实际上会返回一个空结果。 我做错什么了? 也许我应该直接索引我的"页面"而不是? 我犯了什么错?

感谢你提前致谢 !

时间:原作者:1个回答

0 0

遗憾的是,你不能只返回文档的一部分。 如果文档匹配查询,你将获得全部内容;root 和所有嵌套文档。 如果你想只得到部分,那么你可以看看使用父/子文档。

当你在嵌套查询中有一个小的语法错误时,你还没有看到任何点击。 请仔细查看字段名称:

{
"from": 0,
"size": 10,
"query" : {
"nested" : {
"path" :"pages",
"score_mode" :"avg",
"query" : {
"term" : {"pages.tags.name" :"japonese" }
 }
 }
 }
}

如果你需要对父文档的帮助,请随时询问 ! ( 如果你进行google搜索,则应该有示例)

祝你好运

原作者:
...