ES multiple must query возвращает неверные результаты - PullRequest
0 голосов
/ 14 июля 2020
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "categories",
            "query": {
              "terms": {
                "categories.id": [
                  9
                ]
              }
            }
          }
        },
        {
          "terms": {
            "deleted": [
              false
            ]
          }
        },
        {
          "terms": {
            "published": [
              true
            ]
          }
        },
        {
          "nested": {
            "path": "vendors",
            "query": {
              "terms": {
                "vendors.isDeletedVendor": [
                  false
                ]
              }
            }
          }
        },
        {
          "nested": {
            "path": "vendors",
            "query": {
              "terms": {
                "vendors.isPublishedVendor": [
                  true
                ]
              }
            }
          }
        }
      ],
      "should": [
        {
          "bool": {
            "must": [
              {
                "bool": {
                  "should": [
                    {
                      "bool": {
                        "must_not": [
                          {
                            "nested": {
                              "path": "manufacturers",
                              "query": {
                                "exists": {
                                  "field": "manufacturers"
                                }
                              }
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              },
              {
                "bool": {
                  "should": [
                    {
                      "nested": {
                        "path": "vendors",
                        "query": {
                          "terms": {
                            "vendors.id": [
                              87
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "bool": {
                  "should": [
                    {
                      "bool": {
                        "must_not": [
                          {
                            "nested": {
                              "path": "manufacturers",
                              "query": {
                                "exists": {
                                  "field": "manufacturers"
                                }
                              }
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              },
              {
                "bool": {
                  "should": [
                    {
                      "nested": {
                        "path": "vendors",
                        "query": {
                          "terms": {
                            "vendors.id": [
                              56
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  },
  "size": 1000,
  "_source": {
    "includes": [
      "modelName",
      "vendors.id", 
      "manufacturers.id", 
      "id"
    ]
  }
}

То, что я делаю, выглядит примерно так:

Выберите * из данных, где (ManufacturerIds - null, а vendorIds - 87) или (ManufacturerIds - null, а vendorIds - 56)

Но он возвращает такие результаты:

"hits" : [
      {
        "_index" : "onoff-live",
        "_type" : "_doc",
        "_id" : "130011",
        "_score" : 5.0,
        "_source" : {
          "modelName" : "Galaxy A20",
          "manufacturers" : [
            {
              "id" : 216
            }
          ],
          "id" : 130011,
          "vendors" : [
            {
              "id" : 23
            }
          ]
        }
      }]

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

...