Двойной вложенный запрос эластичного поиска не работает для термина - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь выполнить запрос ES для двойного вложенного документа. Термин запроса внутри вложенного запроса, похоже, не работает. Если я заменю приведенный ниже запрос на запрос терминами, это сработает. Я публикую и сопоставление и запрос для вашей справки. Я делаю что-то не так? Я использую ES версию 6.4. По сути, я хочу использовать условие И в поле «bio.mut.type» и вернуть соответствующие документы.

Отображение:

{
    "assoc": {
        "date_detection": true,
        "properties": {
            "bio": {
                "type": "nested",
                "properties": {
                                                "node": {
                        "type": "keyword",
                        "index": "true"
                    },
                    "mut": {
                        "type": "nested",
                        "properties": {
                            "biomarkerType": {
                                "type": "keyword"
                            },
                            "createdBy": {
                                "type": "keyword"
                            },
                            "creationDate": {
                                "type": "date"
                            },
                            "domain": {
                                "type": "keyword"
                            },
                            "id": {
                                "type": "long"
                            },
                            "node": {
                                "type": "keyword"
                            },
                            "status": {
                                "type": "keyword"
                            },
                            "type": {
                                "type": "keyword"
                            },
                            "updateDate": {
                                "type": "date"
                            },
                            "updatedBy": {
                                "type": "keyword"
                            }
                        }
                    }
                }
            }
        },
        "version": {
            "type": "keyword"

        },
                "domain": {
            "type": "keyword"

        }
    }
}

ЗАПРОС:

{
  "bool" : {
    "must" : [
      {
        "nested" : {
          "query" : {
            "terms" : {
              "bio.node" : [
                "X"
              ],
              "boost" : 1.0
            }
          },
          "path" : "bio",
          "ignore_unmapped" : false,
          "score_mode" : "none",
          "boost" : 1.0
        }
      },
      {
        "nested" : {
          "query" : {
            "nested" : {
              "query" : {
                "bool" : {
                  "must" : [
                    {
                      "term" : {
                        "bio.mut.type" : {
                          "value" : "M",
                          "boost" : 1.0
                        }
                      }
                    },
                    {
                      "term" : {
                        "bio.mut.type" : {
                          "value" : "F",
                          "boost" : 1.0
                        }
                      }
                    },
                    {
                      "term" : {
                        "bio.mut.type" : {
                          "value" : "C",
                          "boost" : 1.0
                        }
                      }
                    }
                  ],
                  "adjust_pure_negative" : true,
                  "boost" : 1.0
                }
              },
              "path" : "bio.mut",
              "ignore_unmapped" : false,
              "score_mode" : "none",
              "boost" : 1.0
            }
          },
          "path" : "bio",
          "ignore_unmapped" : false,
          "score_mode" : "none",
          "boost" : 1.0
        }
      },
      {
        "terms" : {
          "domain" : [
            "X"
          ],
          "boost" : 1.0
        }
      }
    ],
    "must_not" : [
      {
        "terms" : {
          "status" : [
            "Deleted"
          ],
          "boost" : 1.0
        }
      }
    ],
    "adjust_pure_negative" : true,
    "boost" : 1.0
  }
}

Образец документа:

{
    "_index": "XXX",
    "_type": "XXX",
    "_id": "3",
    "_score": 1.0,
    "_source": {
        "bio": [{
            "mut": [{
                    "id": 3,
                    "type": "M"
                },
                {
                    "id": 4,
                    "type": "F"
                },
                {
                    "id": 5,
                    "type": "C"
                }
            ]
        }]
    }
}

1 Ответ

1 голос
/ 10 октября 2019

Итак, вы пытаетесь сопоставить отдельные вложенные документы, т.е. вернуть документ верхнего уровня, который содержит разные вложенные документы, которые соответствуют вложенным запросам.

Заменить второй элемент must верхнего уровня следующим:

    {
      "nested": {
        "query": {
          "bool": {
            "must": [
              {
                "nested": {
                  "query": {
                    "term": {
                      "bio.mut.type": {
                        "value": "M",
                        "boost": 1
                      }
                    }
                  },
                  "path": "bio.mut",
                  "ignore_unmapped": false,
                  "score_mode": "none",
                  "boost": 1
                }
              },
              {
                "nested": {
                  "query": {
                    "term": {
                      "bio.mut.type": {
                        "value": "F",
                        "boost": 1
                      }
                    }
                  },
                  "path": "bio.mut",
                  "ignore_unmapped": false,
                  "score_mode": "none",
                  "boost": 1
                }
              },
              {
                "nested": {
                  "query": {
                    "term": {
                      "bio.mut.type": {
                        "value": "C",
                        "boost": 1
                      }
                    }
                  },
                  "path": "bio.mut",
                  "ignore_unmapped": false,
                  "score_mode": "none",
                  "boost": 1
                }
              }
            ]
          }
        },
        "path": "bio",
        "ignore_unmapped": false,
        "score_mode": "none",
        "boost": 1
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...