0

我需要帮助来编写查询以过滤具有以下结构的文档

{
"enviID" : 123,
"empID" : 456,
"projects" : [{"id": 123, "name":"abc"},{"id": 456, "name":"xyz"}],
tests : [{"id": 999, "name":"xxx"},{"id": 000, "name":"yyy"}]
}

我要过滤

envId, empId, project.Id, tests.id

我也在检查未映射测试字段但文档具有此字段的映射文档

4

1 回答 1

0

我想过滤 envId、empId、project.Id、tests.id

由于您没有指定要应用于字段的任何特定过滤器,因此下面显示的搜索查询会根据文档过滤文档Id

映射:

{
  "mappings": {
    "properties": {
      "enviID": {
        "type": "integer"
      },
      "empID": {
        "type": "integer"
      },
      "projects": {
        "type": "nested",
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "text"
          }
        }
      },
      "tests": {
        "type": "nested",
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "text"
          }
        }
      }
    }
  }
}

搜索查询

{
  "query": {
    "bool": {
      "filter": [
        {
          "bool": {
            "must": [
              {
                "term": {
                  "enviID": {
                    "value": "123"
                  }
                }
              },
              {
                "term": {
                  "empID": {
                    "value": "456"
                  }
                }
              },
              {
                "nested": {
                  "path": "projects",
                  "query": {
                    "bool": {
                      "must": [
                        {
                          "match": {
                            "projects.id": 123
                          }
                        }
                      ]
                    }
                  }
                }
              },
              {
                "nested": {
                  "path": "tests",
                  "query": {
                    "bool": {
                      "must": [
                        {
                          "match": {
                            "tests.id": 999
                          }
                        }
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

搜索结果

"hits": [
            {
                "_index": "my_index",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.0,
                "_source": {
                    "enviID": 123,
                    "empID": 456,
                    "projects": [
                        {
                            "id": 123,
                            "name": "abc"
                        },
                        {
                            "id": 456,
                            "name": "xyz"
                        }
                    ],
                    "tests": [
                        {
                            "id": 999,
                            "name": "xxx"
                        },
                        {
                            "id": 0,
                            "name": "yyy"
                        }
                    ]
                }
            }
        ]

您可以参考此内容以了解有关查询过滤器上下文嵌套查询过滤器的更多信息

于 2020-06-20T05:03:18.643 回答