# Nested datatypeの要素から値の存在判定をしたい

**URL:** <https://discuss.elastic.co/t/nested-datatype/132252>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [May 17, 2018, 5:11am UTC](https://discuss.elastic.co/t/nested-datatype/132252 "2018-05-17T05:11:21Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Skane](https://avatars.discourse-cdn.com/v4/letter/s/bbe5ce/32.png) [@Skane](https://discuss.elastic.co/u/Skane)\
**Post date:** [May 17, 2018, 5:11am UTC](https://discuss.elastic.co/t/nested-datatype/132252/1 "2018-05-17T05:11:22Z")

</div>

初めまして、Nested datatypeの要素から条件に合致したドキュメントを引っ張ってくるクエリ方法で困ったことがございます。  
下記のようにnestedを利用したmappingを登録したとします。

> "mappings": {  
> "topics" : {  
> "properties" : {  
> "item\_id" : {  
> "type" : "keyword"  
> },  
> "publish" : {  
> "type" : "nested",  
> "properties" : {  
> "id" : {  
> "type" : "integer"  
> },  
> ....  
> }  
> },  
> ....  
> }  
> }  
> }

これに対して、

> {  
> "item\_id" : 1,  
> "publish" : [  
> {"id" : 1, ...},  
> {"id" : 2, ...}  
> ]  
> }

と

> {  
> "item\_id" : 2,  
> "publish" : [  
> {"id" : 1, ...}  
> ]  
> }

を2件ドキュメントを登録したとします。  
この2件に対して、publish.id = 2が 存在しないドキュメントを検索するクエリはありますでしょうか？  
クエリ結果の期待値としては、

> {  
> "item\_id" : 1,  
> "publish" : [  
> {"id" : 1, ...},  
> {"id" : 2, ...}  
> ]  
> }

のみ結果として取得できたらと思っております。

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [May 17, 2018, 7:07am UTC](https://discuss.elastic.co/t/nested-datatype/132252/2 "2018-05-17T07:07:37Z")

</div>

期待値に「publish.id=2」は含まれているように見えますが、

```json
{
  "item_id" : 1,
  "publish" : [
     {"id" : 1, ...},
     {"id" : 2, ...} ← ここ
  ]
}

```

> この2件に対して、publish.id = 2が 存在しないドキュメントを検索するクエリはありますでしょうか？

publish.id=2（ネストされたオブジェクトで特定の値）を含むものだけを検索したい、ということなのでしょうか？  
あるいは、「publish.id=2が存在しない」ということ期待されているのであれば、検索結果としての  
期待値としては、item\_idは2になるのでは？ という確認です。

---

<div class="post-metadata">

**Author:** ![Skane](https://avatars.discourse-cdn.com/v4/letter/s/bbe5ce/32.png) [@Skane](https://discuss.elastic.co/u/Skane)\
**Post date:** [May 17, 2018, 7:12am UTC](https://discuss.elastic.co/t/nested-datatype/132252/3 "2018-05-17T07:12:13Z")

</div>

> [@tsgkdt](#):
>
> 期待値としては、item\_idは2になるのでは？ という確認です。

大変失礼いたしました。  
期待値に誤りがございました。  
publish.id = 2が存在しない場合なので、期待値は下記となります。

> {  
> "item\_id" : 2,  
> "publish" : [  
> {"id" : 1, ...}  
> ]  
> }

---

<div class="post-metadata">

**Author:** ![johtani](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/johtani/32/44956_2.png) [@johtani](https://discuss.elastic.co/u/johtani)\
**Post date:** [May 17, 2018, 3:28pm UTC](https://discuss.elastic.co/t/nested-datatype/132252/4 "2018-05-17T15:28:51Z")

</div>

publish.id = 2のクエリを[bool](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html)のmust\_notに入れれば良いかと。

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [May 18, 2018, 12:01am UTC](https://discuss.elastic.co/t/nested-datatype/132252/5 "2018-05-18T00:01:50Z")

</div>

johaniさんが書いている内容で、期待する結果が取れることを確認できました。

```auto
{
  "query": {
    "bool": {
      "must_not": [
        {
          "nested": {
            "path": "publish",
            "query": {
              "match": {
                "publish.id": 2
              }
            }
          }
        }
      ]
    }
  }
}

```

※ mappingについては、提示されたものを利用

---

<div class="post-metadata">

**Author:** ![Skane](https://avatars.discourse-cdn.com/v4/letter/s/bbe5ce/32.png) [@Skane](https://discuss.elastic.co/u/Skane)\
**Post date:** [May 18, 2018, 4:19am UTC](https://discuss.elastic.co/t/nested-datatype/132252/6 "2018-05-18T04:19:47Z")

</div>

頂いたクエリをこちらでも試し、解決しました。  
ありがとうございました！

---

<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:** [June 15, 2018, 4:19am UTC](https://discuss.elastic.co/t/nested-datatype/132252/7 "2018-06-15T04:19:53Z")

</div>

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