# フィルタリングの指定方法について

**URL:** <https://discuss.elastic.co/t/topic/307593>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [June 20, 2022, 12:09am UTC](https://discuss.elastic.co/t/topic/307593 "2022-06-20T00:09:38Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tash](https://avatars.discourse-cdn.com/v4/letter/t/a9a28c/32.png) [@Tash](https://discuss.elastic.co/u/Tash)\
**Post date:** [June 20, 2022, 12:09am UTC](https://discuss.elastic.co/t/topic/307593/1 "2022-06-20T00:09:38Z")

</div>

Kibanaで多少複雑な条件に合致したドキュメントをフィルタリングしたいです。  
例えば、下記内容において、フィールドA（ID）とB（色）に着目して、  
Bに「Red」が含まれている場合、そのA（ID）のドキュメントを全てフィルタリングしたいです。  
下例の場合、対象となるドキュメント\_idは1,2,3,6,7,8,9,10,12,13となる。  
ダッシュボード全体、もしくはビジュアリゼーション単体で上記フィルタリングを実現するにはどうすればいいでしょうか？

\_id A B  
1 1 Red  
2 1 Blue  
3 1 Yellow  
4 2 Broun  
5 2 White  
6 3 Yellow  
7 3 Red  
8 3 White  
9 3 Black  
10 3 Gray  
11 4 Black  
12 5 Yellow  
13 5 Red  
14 6 Blue  
15 6 Black

説明不足でわかりにくかもしれませんが、よろしくご教示お願いいたします。

---

<div class="post-metadata">

**Author:** ![Tomo\_M](https://avatars.discourse-cdn.com/v4/letter/t/848f3c/32.png) [@Tomo\_M](https://discuss.elastic.co/u/Tomo_M)\
**Post date:** [June 20, 2022, 8:23am UTC](https://discuss.elastic.co/t/topic/307593/2 "2022-06-20T08:23:37Z")

</div>

2段階の検索が必要ということですね。  
B=Redで検索 ⇒ A=1,3,5  
A=1,3,5で検索 ⇒ id = 1,2,3,6,7,8,9,10,12,13

ElasticsearchにはSQLのようなサブクエリは無いので、やや段階を踏んだ実装が必要なように思います。他にやり方はあるかもしれませんが、以下の方法が思いつきます。

1. 何らかの方法で、以下のようなドキュメントを持つインデックス(test\_terms\_lookup)を作成する。

```auto
{
  "_id": "Red",
  "_source": {
    "A": ["1", "3", "5"]
  }
}

```

1. KibanaのDashboardやDiscoverの+Add filterにて"Edit as Query DSL"をクリックし、以下の[Terms lookup クエリ](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html#query-dsl-terms-lookup)を入力。

```auto
{
  "query": {
    "terms": {
      "A": {
        "index": "test_terms_lookup",
        "id": "Red",
        "path": "A"
      }
    }
  }
}

```

これで、"Red"から目的のドキュメントを検索できるようになりました。1.の「何らかの方法」については、継続的な更新が必要であれば、pivot transformとscripted metric aggregationを駆使すると自動化もできるかもしれません。

また、要件次第では、

```auto
{"A": 1, "B": ["Red", "Blue", "Yellow"]}

```

と言った形でドキュメントを持つことも検討されるかと思います。

---

<div class="post-metadata">

**Author:** ![Tash](https://avatars.discourse-cdn.com/v4/letter/t/a9a28c/32.png) [@Tash](https://discuss.elastic.co/u/Tash)\
**Post date:** [June 21, 2022, 12:02am UTC](https://discuss.elastic.co/t/topic/307593/3 "2022-06-21T00:02:10Z")

</div>

ありがとうございます。とても参考になります。  
ネスト構造が必要だとばかり思っていましたが、2段階ステップを踏む必要があるのですね。  
ステップ1は自動化したいところなので調べてみます。

---

<div class="post-metadata">

**Author:** ![Tomo\_M](https://avatars.discourse-cdn.com/v4/letter/t/848f3c/32.png) [@Tomo\_M](https://discuss.elastic.co/u/Tomo_M)\
**Post date:** [June 21, 2022, 6:00am UTC](https://discuss.elastic.co/t/topic/307593/4 "2022-06-21T06:00:33Z")

</div>

> [@Tomo\_M](#):
>
> また、要件次第では、
> 
> ```auto
> {"A": 1, "B": ["Red", "Blue", "Yellow"]}
> 
> ```
> 
> と言った形でドキュメントを持つことも検討されるかと思います。

ご指摘の通り、ネスト構造を持ったドキュメントとすることでも同様の検索が可能と思います。

---

<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:** [July 19, 2022, 6:01am UTC](https://discuss.elastic.co/t/topic/307593/5 "2022-07-19T06:01:09Z")

</div>

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