# Query to check if nestedobject contains values or not exist

**URL:** <https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993>\
**Category:** Elasticsearch\
**Created:** [July 6, 2020, 11:29am UTC](https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993 "2020-07-06T11:29:55Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![buka\_bidzina](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/buka_bidzina/32/50141_2.png) [@buka\_bidzina](https://discuss.elastic.co/u/buka_bidzina)\
**Post date:** [July 6, 2020, 11:29am UTC](https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993/1 "2020-07-06T11:29:56Z")

</div>

Hello everyone, I am interested if something like this is possible in elastic search...  
So, I want to search for documents, which manufacturer.Id is in 1225 or manufacturer object doesn't exist. Manufacturer is a nested object and query in which I want to add that logic, looks like this.

```
GET index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "manufacturers",
            "query": {
              "terms": {
                "manufacturers.id": [
                  2452
                ]
              }
            }
          }
        }
      ]
    }
  }
}
```

---

<div class="post-metadata">

**Author:** ![buka\_bidzina](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/buka_bidzina/32/50141_2.png) [@buka\_bidzina](https://discuss.elastic.co/u/buka_bidzina)\
**Post date:** [July 6, 2020, 12:06pm UTC](https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993/2 "2020-07-06T12:06:12Z")

</div>

```
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "manufacturers",
            "query": {
              "terms": {
                "manufacturers.id": [
                  2452
                ]
              }
            }
          }
        }
      ]
      ,
      "must_not": [
        {
          "exists": {
            "field": "manufacturers"
          }
        }
      ]
    }
  }
}

```

Tried this query, but only get data with manufacturerIds of 2452

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [July 6, 2020, 12:10pm UTC](https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993/3 "2020-07-06T12:10:17Z")

</div>

As you want to run a "or" you need to wrap the 2 conditions within a `bool` -\> `should`.

---

<div class="post-metadata">

**Author:** ![buka\_bidzina](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/buka_bidzina/32/50141_2.png) [@buka\_bidzina](https://discuss.elastic.co/u/buka_bidzina)\
**Post date:** [July 6, 2020, 12:22pm UTC](https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993/4 "2020-07-06T12:22:20Z")

</div>

how can I have must not in should query

---

<div class="post-metadata">

**Author:** ![buka\_bidzina](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/buka_bidzina/32/50141_2.png) [@buka\_bidzina](https://discuss.elastic.co/u/buka_bidzina)\
**Post date:** [July 6, 2020, 12:23pm UTC](https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993/5 "2020-07-06T12:23:27Z")

</div>

```
GET onoff-live/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "manufacturers",
            "query": {
              "terms": {
                "manufacturers.id": [
                  2452
                ]
              }
            }
          }
        }
      ],
      "should": [
        {
          "exists": {
            "field": "manufacturers"
          }
        }
      ]
    }
  }
}
```

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [July 6, 2020, 12:35pm UTC](https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993/6 "2020-07-06T12:35:10Z")

</div>

You can add another bool query with a must not clause within the should clause of the first bool query.

---

<div class="post-metadata">

**Author:** ![buka\_bidzina](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/buka_bidzina/32/50141_2.png) [@buka\_bidzina](https://discuss.elastic.co/u/buka_bidzina)\
**Post date:** [July 6, 2020, 12:37pm UTC](https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993/7 "2020-07-06T12:37:58Z")

</div>

```
GET onoff-live/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "manufacturers",
            "query": {
              "terms": {
                "manufacturers.id": [
                  2452
                ]
              }
            }
          }
        }
      ],
      "should": [
        {
         "bool": {
           "must_not": [
             {
               "exists": {
                 "field": "manufacturers"
               }
             }
           ]
         }
        }
      ]
    }
  }
}
```

---

<div class="post-metadata">

**Author:** ![buka\_bidzina](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/buka_bidzina/32/50141_2.png) [@buka\_bidzina](https://discuss.elastic.co/u/buka_bidzina)\
**Post date:** [July 6, 2020, 12:39pm UTC](https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993/8 "2020-07-06T12:39:15Z")

</div>

There is 3 hit where manufacturer nested object is empty and there is 184 hit where manufacturer id is in 2452.. and as i expected it should give me 187 hit but it gives me 184

---

<div class="post-metadata">

**Author:** ![dadoonet](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/dadoonet/32/137187_2.png) [@dadoonet](https://discuss.elastic.co/u/dadoonet)\
**Post date:** [July 6, 2020, 3:43pm UTC](https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993/9 "2020-07-06T15:43:05Z")

</div>

I think it should be something like

```
GET onoff-live/_search
{
  "query": {
    "bool": {
      "should": [

        {
          "nested": {
            "path": "manufacturers",
            "query": {
              "terms": {
                "manufacturers.id": [
                  2452
                ]
              }
            }
          }
        },

        {
         "bool": {
           "must_not": [
             {
               "exists": {
                 "field": "manufacturers"
               }
             }
           ]
         }
        }
      ]
    }
  }
}
```

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [August 3, 2020, 3:43pm UTC](https://discuss.elastic.co/t/query-to-check-if-nestedobject-contains-values-or-not-exist/239993/10 "2020-08-03T15:43:09Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
