# 検索時にインデックスごとに返却するフィールドを分けたい

**URL:** <https://discuss.elastic.co/t/topic/149924>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [September 26, 2018, 4:54am UTC](https://discuss.elastic.co/t/topic/149924 "2018-09-26T04:54:29Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![onorioriori](https://avatars.discourse-cdn.com/v4/letter/o/74df32/32.png) [@onorioriori](https://discuss.elastic.co/u/onorioriori)\
**Post date:** [September 26, 2018, 4:54am UTC](https://discuss.elastic.co/t/topic/149924/1 "2018-09-26T04:54:29Z")

</div>

仮のインデックス構成となりますが、

- index1のフィールド
  - name
  - title

- index2のフィールド
  - name
  - title

という2つのインデックスが存在時に、

- index1のname
- index2のtitle

のみを検索結果として取得したい場合、実現方法はございますでしょうか？

イメージとしては、以下のようなものを考えているのですが、  
\_source\_includeではインデックスの指定は出来ないため苦戦しております。

```auto
GET /_all/_search?_source_include=index1.name,index2.title 

```

よろしくお願い致します。

---

<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:** [September 26, 2018, 6:37am UTC](https://discuss.elastic.co/t/topic/149924/2 "2018-09-26T06:37:35Z")

</div>

ドキュメントを見る限りだと、出来ないようにも見えます...

過去、類似の発言もありましたが、回答がつかずにCloseになっていました。

> [@Different source filtering when searching accross multiple indices](https://discuss.elastic.co/t/different-source-filtering-when-searching-accross-multiple-indices/136487):
>
> We are trying to query across multiple indices and using source , includes and excludes to get the required fields in the \_source is it possible to specify the includes and excludes per index i.e. different set of includes,excludes for each index in elastic search 5.6.4

例示なので実際には違うのでしょうけども、  
index1のnameとindex2のnameが、違うものを指す、異なる内容のものだとすれば、  
違うフィールド名にして取り扱うことで、\_sourceで悩まなくても良いと思ったところです。

---

<div class="post-metadata">

**Author:** ![r4-keisuke](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/r4-keisuke/32/9268_2.png) [@r4-keisuke](https://discuss.elastic.co/u/r4-keisuke)\
**Post date:** [September 26, 2018, 8:12am UTC](https://discuss.elastic.co/t/topic/149924/3 "2018-09-26T08:12:10Z")

</div>

こんにちはー

要件と実現方法の話になってしまって申し訳ないですが、  
とにかく1クエリで両方のデータを取ることだけが目的であれば、  
普通にmsearchでindex毎にfields指定すればいいかなと思います。  
[https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html)

---

<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:** [September 28, 2018, 11:31am UTC](https://discuss.elastic.co/t/topic/149924/4 "2018-09-28T11:31:21Z")

</div>

@onorioriori  
ちなみに、インデックスごとに個別のフィールドを取得したい理由と、実際のユースケース（使用するクライアントアプリ（ライブラリ？Kibana？そのほか？））などを教えてもらうことはできますでしょうか？

---

<div class="post-metadata">

**Author:** ![onorioriori](https://avatars.discourse-cdn.com/v4/letter/o/74df32/32.png) [@onorioriori](https://discuss.elastic.co/u/onorioriori)\
**Post date:** [October 1, 2018, 3:31am UTC](https://discuss.elastic.co/t/topic/149924/5 "2018-10-01T03:31:03Z")

</div>

@tsgkdt  
類似トピックのリンクありがとうございます。  
はい、実際に考えているnameは同一のものを指しております。  
index1\_nameの様なフィールド名にする事も検討したのですが、  
まず理想とする条件で実現する方法があるのかと思い、質問させて頂きました。

@r4-keisuke  
お返事ありがとうございます。  
msearchの検討もしたのですが、  
2つのインデックス内のドキュメントを混在でソートを実施して表示したいため、  
別々に取得するだけですと今回の要件に合いませんでした…

@johtani  
お返事ありがとうございます。  
個別フィールドを取得したい理由としては、APIのレスポンスとして、  
不要なフィールド情報を含む検索結果からレスポンスを改めて成形するのではなく、  
必要なフィールド情報のみを取得し、その情報をそのまま返したいと思ったためです。  
index1とindex2には同じものを指すフィールドがあるものの、  
一方のインデックスでは返却の必要性がない、といった状態です。  
使用しているのは、pythonのクライアントになります。バージョンは6.3.0です。

---

<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:** [October 2, 2018, 11:34am UTC](https://discuss.elastic.co/t/topic/149924/6 "2018-10-02T11:34:23Z")

</div>

Esだけの機能では無理だと思うので、クライアント側で何らかの処理を書いていただく形になるかと。  
Pythonのクライアントは私はそれほど詳しくないですが、  
返却された1件ごとのドキュメントに、`_index`というデータがあるはずなので、クライアント側で、`_index`の値を見ながら必要な項目だけ切り出すと言った感じでしょうか。

変わることはないとは思いますが、万が一、Esからのレスポンスのオブジェクトが変わった場合の影響範囲を考えると、オブジェクトの詰め替え（Esのレスポンスを元にクライアントアプリ側で使用するオブジェクトを生成する）を行っておくのがいいのではないかなぁと思う次第です。

---

<div class="post-metadata">

**Author:** ![onorioriori](https://avatars.discourse-cdn.com/v4/letter/o/74df32/32.png) [@onorioriori](https://discuss.elastic.co/u/onorioriori)\
**Post date:** [October 4, 2018, 6:34am UTC](https://discuss.elastic.co/t/topic/149924/7 "2018-10-04T06:34:34Z")

</div>

ESの機能のみでは不可能の旨、承知しました。  
仰る通り、各インデックス単位で、必要なインスタンス変数を持つクラスを作成しておき、  
ESからのレスポンスに含まれる`_index`の値によって、対応するクラスのオブジェクトを生成するのが良さそうですね。  
実際に実装してみたところ、返却するフィールドをうまく切り分けることが出来ました。  
ご回答ありがとうございました。

---

<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:** [November 1, 2018, 6:34am UTC](https://discuss.elastic.co/t/topic/149924/8 "2018-11-01T06:34:50Z")

</div>

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