对映射的DynamoDb数据进行Elasticsearch嵌套查询不返回任何内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对映射的DynamoDb数据进行Elasticsearch嵌套查询不返回任何内容相关的知识,希望对你有一定的参考价值。

我在Elasticsearch中映射了DynamoDb中的数据。我想返回一个通过嵌套数据查询它的文档。我有一个最简单的嵌套查询的问题:

{
  "query": {
    "nested": {
      "path": "doc.dynamodb.newImage.childCalls.M",
      "query": {
        "bool": {
          "minimum_should_match": 1,
          "should": [
            {
              "match": {
                "doc.dynamodb.newImage.childCalls.M.caller.S": "+18002427338"
              }
            },
            {
              "match": {
                "doc.dynamodb.newImage.childCalls.M.callee.S": "+18002427338"
              }
            }
          ]
        }
      }
    }
  }
}

看起来我错过了必不可少的东西这是映射:

"childCalls": {
    "properties": {
        "M": {
            "type": "nested",
            "properties": {
                "callee": {
                    "properties": {
                        "S": {
                            "type": "string",
                            "index": "not_analyzed"
                        }
                    }
                },
                "caller": {
                    "properties": {
                        "S": {
                            "type": "string",
                            "index": "not_analyzed"
                        }
                    }
                }
            }
        }
    }
}

响应不包含任何错误:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": [

    ]
  }
}

是的,索引包含我不想返回的文档。我也尝试了caller.S路径,它没有帮助。

UPD

似乎嵌套数据应该是一个{key: value}对象,以正确索引。因此,我需要一个预处理器管道来将用对象表示的值转换为平面值。

答案

好的,几天之后,当对象数组包含看起来像{key: string|number|boolean}的对象时,根本不需要嵌套映射。复杂对象不会像docs中描述的那样进行转换,它们看起来像对象数组。这是映射:

"childCalls": {
    "properties": {
        "L": {
            "properties": {
                "M": {
                    "properties": {
                        "callee": {
                            "properties": {
                                "S": {
                                    "type": "string",
                                    "index": "not_analyzed"
                                }
                            }
                        },
                        "caller": {
                            "properties": {
                                "S": {
                                    "type": "string",
                                    "index": "not_analyzed"
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

和工作查询:

{
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
        {
          "match": {
            "doc.dynamodb.newImage.childCalls.L.M.caller.S": "+18002427338"
          }
        },
        {
          "match": {
            "doc.dynamodb.newImage.childCalls.L.M.callee.S": "+18002427338"
          }
        }
      ]
    }
  }
}

以上是关于对映射的DynamoDb数据进行Elasticsearch嵌套查询不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章

DynamoDB 表设计模式:使用 utc 时间戳对数据进行分类

Amazon DynamoDB:警告“配置的 dynamodb 表 JobDetails 的写入吞吐量小于集群映射容量”

如何使用 java 对 Amazon dynamodb 中的数据进行排序

使用条件更新集合中的DynamoDB嵌套映射

过滤 AWS DynamoDB 中的映射对象

无法使用 YCSB 对 DynamoDb 进行基准测试