<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Kofi Bartlett - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Kofi Bartlett - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/jp/search-labs/author/kofi-bartlett</link>
    </image>
    <link>https://www.elastic.co/jp/search-labs/author/kofi-bartlett</link>
    <atom:link href="https://www.elastic.co/jp/search-labs/rss/author/kofi-bartlett.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[jp]]></language>
    <lastBuildDate>Tue, 22 Sep 2026 18:33:47 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Elasticsearchインデックスのフィールドを表示する]]></title>
    <description><![CDATA[Elasticsearch インデックス内のフィールドを表示するためのテクニックを探ります。
]]></description>
    <content:encoded><![CDATA[<p>この記事では、Elasticsearch インデックスでフィールドを表示する方法について説明します。これは、データの構造を理解し、特定のフィールドを識別し、問題をトラブルシューティングするのに役立ちます。以下のトピックを取り上げます。</p><ol><li><p><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#1.-using-the--mapping-api-to-retrieve-field-information"><code>_mapping</code></a> API<a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#1.-using-the--mapping-api-to-retrieve-field-information">を使用してフィールド情報を取得する</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#2.-using-the--search-api-to-display-field-values"><code>_search</code></a> API<a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#2.-using-the--search-api-to-display-field-values">を使用してフィールド値を表示する</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#3.-filtering-fields-using-the-fields-parameter">パラメータ を使用してフィールドをフィルタリングする</a><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#3.-filtering-fields-using-the-fields-parameter"><code>fields</code></a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index#4.-displaying-nested-fields">ネストされたフィールドの表示</a></p></li></ol><h2>1. _mapping APIを使用してフィールド情報を取得する</h2><p><code>_mapping</code> API を使用すると、1 つまたは複数の<a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-index/">インデックス</a>のマッピング定義を取得できます。これには、フィールド、そのデータ型、およびその他のプロパティに関する情報が含まれます。特定のインデックスのマッピングを取得するには、次のリクエストを使用します。</p>GET /&lt;index_name&gt;/_mapping<p>たとえば、 <code>my_index</code>という名前のインデックスがある場合、次のリクエストでそのマッピングを取得できます。</p>GET /my_index/_mapping<p>応答には、フィールドとそのプロパティに関する情報を含むインデックスのマッピング定義が含まれます。</p><p>特定のフィールドのマッピングを取得することもできます。これは、マッピングが非常に大きく、特定のフィールドにのみ焦点を当てたい場合に便利です。特定のフィールドのマッピングを取得するには、次のリクエストを使用します。</p>GET /my_index/_mapping/field/my_field<p>次のリクエストのように、フィールド名をコンマで区切ることで、複数のフィールドのマッピングを取得することもできます。</p>GET /my_index/_mapping/field/my_field_1,my_field_2,my_field_3<h2>2. _search APIを使用してフィールド値を表示する</h2><p>Elasticsearch インデックス内のフィールドの値を表示するには、 <code>_search</code> API を使用できます。デフォルトでは、 <code>_search</code> API は、インデックスが作成された元の JSON ドキュメントを含む<code>_source</code>フィールドを返します。特定のフィールドのみを表示するには、検索リクエストで<code>_source</code>パラメータを使用できます。</p><p>以下は、 <code>my_index</code>インデックス内のドキュメントの<code>title</code>フィールドと<code>author</code>フィールドの値を返す検索要求の例です。</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["title", "author"]
}<p>この例では、 <code>_source</code>パラメータは返されるフィールドを指定します。</p><h2>3. フィールドパラメータを使用してフィールドをフィルタリングする</h2><p><code>fields</code>パラメータを使用して、検索応答で返されるフィールドをフィルタリングすることもできます。これは、特定のフィールドのみが必要で、応答のサイズを縮小したい場合に役立ちます。<code>fields</code>パラメータは、フィールド名またはワイルドカード パターンの配列を受け入れます。</p><p>たとえば、 <code>my_index</code>インデックス内のドキュメントの<code>title</code>フィールドと<code>author</code>フィールドのみを返すには、次の検索リクエストを使用できます。</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["title", "author"],
  "_source": false
}<p>ソース ドキュメントを返さないように、 <code>_source</code>パラメータは false に設定されていることに注意してください。</p><p><code>text</code>データ型のすべてのフィールドを返すには、次のようなワイルドカード パターンを使用できます。</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["*.text"],
  "_source": false
}<h2>4. ネストされたフィールドの表示</h2><p>インデックスにネストされたフィールドが含まれている場合は、ドット表記を使用して、 <code>fields</code>パラメータでネストされたフィールド パスを指定できます。たとえば、 <code>address.city</code>という名前のネストされたフィールドがある場合、次のように検索応答に含めることができます。</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "fields": ["title", "author", "address.city"],
  "_source": false
}<p>この例では、検索応答には<code>title</code> 、 <code>author</code> 、および<code>address.city</code>フィールドの値が含まれます。</p><h2>まとめ</h2><p>結論として、Elasticsearch インデックス内のフィールドを表示するには、 <code>_mapping</code> API を使用してフィールド情報を取得し、 <code>_search</code> API を使用してフィールド値を表示します。<code>_source</code>または<code>fields</code>パラメータを使用して検索応答で返されるフィールドをフィルタリングし、ドット表記を使用してネストされたフィールドを表示できます。これらの手法は、データの構造を理解し、特定のフィールドを識別し、問題のトラブルシューティングを行うのに役立ちます。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/displaying-fields-in-an-elasticsearch-index</guid>
    <category><![CDATA[データのインデキシング]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3a1fcc771a2504e5/6a17f817abe0f23038dfebca/fa386d7bbaeab6855e62897ace8d7dca91a060b4-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 26 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearch のディスク容量と使用量を最適化する方法]]></title>
    <description><![CDATA[Elasticsearchのディスクの空き容量が極端に少ない場合（過度な利用）や、ディスク容量が十分に活用されていない場合を未然に防ぎ、対処する方法について知り、クラスターのコストを最適化します。]]></description>
    <content:encoded><![CDATA[<p>ディスク管理はどのデータベースでも重要であり、Elasticsearch も例外ではありません。十分なディスク容量がない場合、Elasticsearch はノードへのシャードの割り当てを停止します。これにより、最終的にはクラスターにデータを書き込むことができなくなり、アプリケーションでデータが失われる潜在的なリスクが生じます。一方、ディスク容量が多すぎる場合は、必要以上のリソースに対して料金を支払うことになります。</p><h2>透かしの背景</h2><p>Elasticsearch クラスターには、使用可能なディスク容量を追跡するのに役立つさまざまな「ウォーターマーク」しきい値があります。ノード上のディスクがいっぱいになると、最初に超えるしきい値は「低ディスク ウォーターマーク」になります。2 番目のしきい値は、「高ディスク ウォーターマークしきい値」になります。最終的には、「ディスク洪水段階」に到達します。このしきい値を超えると、クラスターは、ウォーターマークを通過したノード上の 1 つのシャード (プライマリまたはレプリカ) を持つすべてのインデックスへの書き込みをブロックします。読み取り（検索）は引き続き可能です。</p><h2>ディスクがいっぱいになった場合（過剰使用）の防止と対処方法</h2><p>Elasticsearch ディスクがいっぱいになった場合の対処方法はいくつかあります。</p><ol><li><p><strong>古いデータ を削除する:</strong> 通常、データを無期限に保存しないでください。ディスクがいっぱいになるのを防ぎ、解決する 1 つの方法は、データが一定の期間に達したときに確実にアーカイブされ、削除されるようにすることです。これを行う 1 つの方法は、 <a href="https://www.elastic.co/docs/manage-data/lifecycle/index-lifecycle-management">ILM を</a>使用することです。</p></li><li><p><strong>ストレージ容量の追加:</strong>データを削除できない場合は、パフォーマンスに悪影響を与えずにすべてのデータを保持するために、データ ノードを追加するか、ディスク サイズを増やす必要がある場合があります。クラスターにストレージ容量を追加する必要がある場合は、ストレージ容量だけを追加するのか、それともストレージ容量に加えて RAM と CPU のリソースも比例して追加するのかを検討する必要があります (以下の<a href="https://www.elastic.co/search-labs/blog/optimize-elasticsearch-disk-space-and-usage#the-relationship-between-disk-size,-ram-and-cpu">ディスク サイズ、RAM、CPU の比率</a>に関するセクションを参照)。</p></li></ol><h2>Elasticsearch クラスターにストレージ容量を追加する方法</h2><ol><li><p><strong>データ ノードの数を増やします。</strong>新しいノードは既存のノードと同じサイズで、同じ Elasticsearch バージョンである必要があることに注意してください。</p></li><li><p><strong>既存のノードのサイズを増やす:</strong>クラウドベースの環境では、通常、既存のノードのディスク サイズと RAM/CPU を増やすのは簡単です。</p></li><li><p><strong>ディスク サイズのみを増やす:</strong>クラウドベースの環境では、ディスク サイズを増やすのは比較的簡単です。</p></li><li><p><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"><strong>スナップショット</strong></a><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"> </a><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"><strong>そして</strong></a><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"> </a><a href="https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore"><strong>復元</strong></a><strong>:</strong>要求に応じて古いデータを自動プロセスでバックアップから取得できるようにする場合は、古いインデックスのスナップショットを作成し、それらを削除して、要求に応じてスナップショットからデータを一時的に復元できます。</p></li><li><p><strong>シャードごとのレプリカの数を減らす:</strong>データを削減するもう 1 つのオプションは、各シャードのレプリカの数を減らすことです。高可用性を実現するには、シャードごとに 1 つのレプリカを用意する必要がありますが、データが古くなると、レプリカなしでも作業できる可能性があります。これは通常、データが永続的である場合、または必要に応じて復元できるバックアップがある場合に機能します。</p></li><li><p><strong>アラートを作成する:</strong>将来ディスクがいっぱいになるのを防ぎ、積極的に対処するには、ディスクの使用状況に基づいて、ディスクがいっぱいになり始めたときに通知するアラートを作成する必要があります。</p></li></ol><h2>ディスク容量が十分に活用されない場合の防止と対処方法</h2><p>ディスク容量が十分に活用されていない場合は、クラスター上のストレージ ボリュームを削減するさまざまなオプションがあります。</p><h3>Elasticsearch クラスターのストレージ容量を削減する方法</h3><p>クラスターのストレージ容量を削減する方法はさまざまです。</p><p><strong>1. データノードの数を減らす</strong></p><p>データストレージを削減し、RAM と CPU リソースも同じ割合で削減したい場合は、これが最も簡単な戦略です。不要なノードを廃止すると、最大のコスト削減が実現する可能性があります。</p><p>ノードを廃止する前に、次の操作を行う必要があります。</p><ul><li><p>廃止するノードが MASTER ノードとして必要ではないことを確認します。常に、MASTER ノード ロールを持つノードが少なくとも 3 つ必要です。</p></li><li><p>廃止するノードからデータ シャードを移行します。</p></li></ul><p><strong>2. 既存のノードを小さなノードに置き換える</strong></p><p>ノードの数をさらに減らすことができない場合 (通常、最小構成は 3 です)、既存のノードのサイズを縮小することが必要になる場合があります。シャードはノードあたりのシャード数に基づいてバランスが取られるため、すべてのデータ ノードが同じ RAM メモリとディスク サイズであることを確認することをお勧めします。</p><p>プロセスは次のようになります。</p><ul><li><p>クラスターに新しい小さなノードを追加する</p></li><li><p>廃止するノードからシャードを移行する</p></li><li><p>古いノードをシャットダウンする</p></li></ul><p><strong>3. ノード上のディスクサイズを減らす</strong></p><p>クラスターの全体的な RAM または CPU を変更せずに、ノード上のディスク サイズのみを削減したい場合は、各ノードのディスク サイズを削減できます。Elasticsearch ノード上のディスク サイズを縮小するのは簡単なプロセスではありません。</p><p>最も簡単な方法は通常次のようになります。</p><ul><li><p>ノードからシャードを移行する</p></li><li><p>ノードを停止する</p></li><li><p>適切なサイズの新しいデータボリュームをノードにマウントします</p></li><li><p>古いディスクボリュームから新しいボリュームにすべてのデータをコピーします</p></li><li><p>古いボリュームAを切り離す</p></li><li><p>ノードを起動し、シャードをノードに戻す</p></li></ul><p>これには、このプロセス中にノードからの追加シャードを一時的に保存するのに十分な容量が他のノードに必要です。多くの場合、このプロセスの管理にかかるコストは、ディスク使用量の潜在的な節約額を上回る可能性があります。このため、必要なディスク サイズを持つ新しいノードにノード全体を置き換える方が簡単な場合があります (上記の「既存のノードをより小さなノードに置き換える」を参照)。</p><p>不要なリソースに料金を支払う場合、リソースの使用率を最適化することでコストを削減できることは明らかです。</p><h2>ディスクサイズ、RAM、CPUの関係</h2><p>クラスター内のディスク容量と RAM の理想的な比率は、特定のユースケースによって異なります。このため、ストレージ容量の変更を検討する際には、現在のディスク/RAM/CPU の比率が適切にバランスされているかどうか、また、その結果として RAM/CPU を同じ比率で追加/削減する必要があるかどうかも考慮する必要があります。</p><p>RAM と CPU の要件は、<a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-indexing/">インデックス作成</a>アクティビティの量、クエリの数と種類、さらに検索および集約されるデータの量によって異なります。これは多くの場合、クラスターに保存されるデータの量に比例するため、ディスク サイズにも関連している必要があります。</p><p>ディスク容量と RAM の比率は、使用事例に応じて変わる可能性があります。ここでいくつかの例をご覧ください:</p><p></p><p>インデックスアクティビティ</p><p>保持</p><p>検索アクティビティ</p><p>ディスク容量</p><p>ラム</p><p>エンタープライズ検索アプリ</p><p>中程度のログ摂取</p><p>長さ</p><p>ライト</p><p>2TB</p><p>32GB</p><p>アプリ監視</p><p>集中的なログ取り込み</p><p>短い</p><p>ライト</p><p>1TB</p><p>32GB</p><p>電子商取引</p><p>軽量データインデックス</p><p>不定</p><p>重い</p><p>500GB</p><p>32GB</p><p><em>ノード マシンの構成の変更は、ノードのダウンタイムが発生する可能性があり、すでに過剰に負荷がかかっている他のノードにシャードが移行しないようにする必要があるため、慎重に行う必要があることに注意してください。</em></p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/optimize-elasticsearch-disk-space-and-usage</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/optimize-elasticsearch-disk-space-and-usage</guid>
    <category><![CDATA[基本]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt087c3d95b6cb59c5/6a17dbda445de986f54cffd9/5d41a078dd03e4480a0ff4e9591c8618b9bab4d0-720x420.png" length="0" type="image/png"/>
    <pubDate>Fri, 16 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearchインデックスのレプリカ数の設定方法]]></title>
    <description><![CDATA[Elasticsearchインデックスでnumber_of_replicasを構成して、検索パフォーマンスを向上させ、ノード障害に対する耐性を高める方法を学びます。 
]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch は、大量のデータを処理し、高い可用性を提供できる分散システムとして設計されています。これを可能にする重要な機能の 1 つは、 <code>number_of_replicas</code>設定によって制御されるインデックス レプリケーションの概念です。この記事では、この設定の詳細、その影響、および適切な構成方法について詳しく説明します。</p><h2>Elasticsearchにおけるレプリカの役割</h2><p>Elasticsearch では、インデックスは複数のプライマリ シャードに分割されたドキュメントのコレクションです。各プライマリ シャードは自己完結型の Apache Lucene インデックスであり、インデックス内のドキュメントはすべてのプライマリ シャードに分散されます。高可用性とデータの冗長性を確保するために、Elasticsearch では各シャードにレプリカと呼ばれる 1 つ以上のコピーを持たせることができます。<code>number_of_replicas</code>設定は、Elasticsearch がインデックス内の各プライマリ シャードに対して作成するレプリカ シャード (コピー) の数を制御します。デフォルトでは、Elasticsearch はプライマリ シャードごとに 1 つのレプリカを作成しますが、これはシステムの要件に応じて変更できます。</p><h2>number_of_replicas の設定</h2><p><code>number_of_replicas</code>設定は、インデックスの作成時に構成することも、後で更新することもできます。インデックス作成時に設定する方法は次のとおりです。</p>PUT /my_index
{
  "settings": {
    "number_of_replicas": 2
  }
}<p>この例では、Elasticsearch は<code>my_index</code>インデックス内のプライマリ シャードごとに 2 つのレプリカを作成します。</p><p>既存のインデックスの<code>number_of_replicas</code>設定を更新するには、 <code>_settings</code> API を使用できます。</p>PUT /my_index/_settings
{
  "number_of_replicas": 3
}<p>このコマンドは、 <code>my_index</code>インデックスを更新して、プライマリ シャードごとに 3 つのレプリカを作成します。</p><h2>number_of_replicas設定の影響</h2><p><code>number_of_replicas</code>設定は、Elasticsearch<a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-cluster/">クラスター</a>のパフォーマンスと復元力に大きな影響を与えます。考慮すべき重要なポイントは次のとおりです。</p><ol><li><p><strong>データの冗長性と可用性:</strong> <code>number_of_replicas</code>を増やすと、各シャードのコピーがさらに作成され、データの可用性が向上します。ノードに障害が発生した場合でも、Elasticsearch は残りの<a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-node/">ノード</a>上のレプリカ シャードからデータを提供できます。</p></li><li><p><strong>検索パフォーマンス:</strong>レプリカ シャードは読み取り要求を処理できるため、レプリカの数を増やすと、負荷がより多くのシャードに分散され、検索パフォーマンスが向上します。</p></li><li><p><strong>書き込みパフォーマンス:</strong>ただし、各書き込み操作はシャードのすべてのコピーに対して実行する必要があります。したがって、 <code>number_of_replicas</code>大きくすると、書き込みごとに実行する必要がある操作の数が増えるため、<a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-indexing/">インデックス作成の</a>パフォーマンスが低下する可能性があります。</p></li><li><p><strong>ストレージ要件:</strong>レプリカが増えると、ストレージ容量も増えます。追加のレプリカを保存するのに十分な容量がクラスターにあることを確認する必要があります。</p></li><li><p><strong>ノード障害に対する耐性:</strong>クラスター内のノードの数を考慮して<code>number_of_replicas</code>を設定する必要があります。<code>number_of_replicas</code>がノード数以上である場合、クラスターはデータ損失なしで複数のノードの障害を許容できます。</p></li></ol><h2>number_of_replicas の設定に関するベストプラクティス</h2><p>最適な<code>number_of_replicas</code>設定は、システムの特定の要件によって異なります。ただし、一般的なベストプラクティスをいくつか示します。</p><ul><li><p>単一ノード クラスターの場合、レプリカを保持する他のノードがないため、 <code>number_of_replicas</code> 0 に設定する必要があります。</p></li><li><p>マルチノード クラスターの場合、データの冗長性と高可用性を確保するために、 <code>number_of_replicas</code>少なくとも 1 に設定する必要があります。</p></li><li><p>検索パフォーマンスを優先する場合は、 <code>number_of_replicas</code>を増やすことを検討してください。ただし、書き込みパフォーマンスとストレージ要件とのトレードオフに留意してください。</p></li><li><p>クラスターに追加のレプリカを保存するのに十分な容量があることを常に確認してください。</p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-index-number-of_replicas</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-index-number-of_replicas</guid>
    <category><![CDATA[基本]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd041e871a8935448/6a17de320b0bedf404dd34ab/23b96aaa1a38b1f4747b4a87695d816f24c0cf70-720x421.jpg" length="0" type="image/jpeg"/>
    <pubDate>Wed, 14 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearch フィールドをインデックスから除外する]]></title>
    <description><![CDATA[フィールドを除外するようにElasticsearchを設定する方法、インデキシングからフィールドを除外する主な理由、従うべきベストプラクティスを学びます。]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch では、インデックス作成とは、データを簡単に検索できるように保存および整理するプロセスを指します。ドキュメント内のすべてのフィールドにインデックスを作成すると便利な場合もありますが、特定のフィールドをインデックス作成から除外したい場合もあります。これにより、パフォーマンスが向上し、ストレージ コストが削減され、Elasticsearch インデックスの全体的なサイズが最小限に抑えられます。</p><p>この記事では、インデックス作成からフィールドを除外する理由、特定のフィールドを除外するように Elasticsearch を構成する方法、およびそうする際に従うべきベスト プラクティスについて説明します。</p><h2>フィールドをインデックスから除外する理由</h2><ol><li><p><strong>パフォーマンス:</strong>ドキュメント内のすべてのフィールドにインデックスを作成すると、インデックス作成時間が長くなり、検索パフォーマンスが低下する可能性があります。検索や集計に必要のないフィールドを除外することで、Elasticsearch クラスターの全体的なパフォーマンスを向上させることができます。</p></li><li><p><strong>ストレージ:</strong>フィールドのインデックス作成により、ストレージ スペースが消費されます。検索や集計に必要のないフィールドを除外すると、Elasticsearch クラスターのストレージ要件を削減できます。</p></li><li><p><strong>インデックス サイズ:</strong> Elasticsearch インデックスのサイズは、インデックスが作成されるフィールドの数に直接関係します。不要なフィールドを除外することで、インデックスのサイズを最小限に抑えることができ、検索とインデックス作成のパフォーマンスが向上します。</p></li></ol><h2>フィールドを除外するようにElasticsearchを構成する</h2><p>Elasticsearch でフィールドをインデックスから除外するには、フィールドのマッピングで「index」プロパティを使用できます。「index」プロパティを「false」に設定すると、Elasticsearch はフィールドにインデックスを付けず、検索や集計に使用できなくなります。</p><p>Elasticsearch マッピングを使用してフィールドをインデックスから除外する方法の例を次に示します。</p>PUT /my_index
{
  "mappings": {
    "properties": {
      "field_to_exclude": {
        "type": "text",
        "index": false
      }
    }
  }
}<p>この例では、「field_to_exclude」という単一のフィールドを持つ「my_index」という新しいインデックスを作成しています。「index」プロパティを「false」に設定することで、Elasticsearch にこのフィールドをインデックスしないように指示します。ただし、フィールドはソース ドキュメントでは引き続き使用できます。</p><h2>インデックスからフィールドを除外するためのベストプラクティス</h2><ol><li><p><strong>データを分析する:</strong>フィールドをインデックスから除外する前に、データを分析し、検索と集計に必要なフィールドを理解することが重要です。これにより、どのフィールドを除外するかについて十分な情報に基づいた決定を下すことができます。</p></li><li><p><strong>変更をテストする:</strong>フィールドをインデックス作成から除外する場合は、検索機能と集計機能が期待どおりに動作することを確認するために、変更をテストすることが重要です。これにより、予期しない問題やパフォーマンスの問題を回避できます。</p></li><li><p><strong>パフォーマンスを監視する:</strong>フィールドをインデックスから除外した後、Elasticsearch クラスターのパフォーマンスを監視して、変更が目的の効果をもたらしたことを確認します。これにより、必要となる可能性のある追加の最適化を特定するのに役立ちます。</p></li><li><p><strong>ソース フィルタリングを使用する:</strong> Elasticsearch にフィールドを保存する必要があるが、検索可能にしたり集計に使用したりしたくない場合は、ソース フィルタリングの使用を検討してください。これにより、フィールドを _source フィールドに保存しながら、インデックスからは除外することができます。</p></li></ol><h2>まとめ</h2><p>Elasticsearch のインデックス作成からフィールドを除外すると、パフォーマンスの向上、ストレージ コストの削減、インデックスの全体的なサイズの最小化に役立ちます。データを慎重に分析し、検索と集計に必要なフィールドを理解することで、どのフィールドを除外するかについて十分な情報に基づいた決定を下すことができます。常に変更をテストし、Elasticsearch クラスターのパフォーマンスを監視して、最適化が期待どおりの効果をもたらすことを確認してください。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/excluding-elasticsearch-fields-from-indexing</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/excluding-elasticsearch-fields-from-indexing</guid>
    <category><![CDATA[データのインデキシング]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt399bcc5a2e55bfe0/6a1708b45091684557e1ba3c/3aa0b481994d2445ba979d3c79fff64c5ee6676a-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearch のドキュメントからフィールドを削除する]]></title>
    <description><![CDATA[Update API、スクリプト、または単一削除や一括削除のための再インデックスを使用して、Elasticsearchドキュメントからフィールドを削除する方法を学びます。]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch では、ドキュメントからフィールドを削除することが一般的な要件です。これは、インデックスから不要な情報や古い情報を削除する場合に役立ちます。この記事では、Elasticsearch 内のドキュメントからフィールドを削除するさまざまな方法を、例と手順とともに説明します。 </p><h2>方法1: Update APIを使用する</h2><p><a href="https://www.elastic.co/docs/reference/elasticsearch/rest-apis/update-document">Update API</a>を使用すると、ドキュメントのソースを変更するスクリプトを提供することでドキュメントを更新できます。このAPIを使用して、フィールドをnullに設定して、ドキュメントからフィールドを削除できます。以下はその手順のステップ別のガイドです。</p><p>1. 更新するドキュメントのインデックス、ドキュメント タイプ (Elasticsearch 6.x 以前を使用している場合)、およびドキュメント ID を特定します。</p><p>2. フィールドを null に設定するスクリプト、またはソース ドキュメントからフィールドを削除するスクリプトで Update API を使用します。次の例は、「my_index」インデックス内の ID「1」のドキュメントから「field_to_delete」フィールドを削除する方法を示しています。</p>POST /my_index/_update/1
{
  "script": "ctx._source.remove('field_to_delete')"
}<p>3. リクエストを実行します。成功した場合、Elasticsearch はドキュメントが更新されたことを示す応答を返します。</p><p>注: このメソッドは、指定されたドキュメントからフィールドのみを削除します。フィールドはマッピングおよびインデックス内の他のドキュメントに引き続き存在します。</p><h2>方法2：変更されたソースでの再インデックス</h2><p>インデックス内のすべてのドキュメントからフィールドを削除したい場合、<a href="https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-reindex">Reindex API</a>を使用して、変更されたソースで新しいインデックスを作成できます。方法は以下の通りです。</p><p>1. 元のインデックスと同じ設定とマッピングを持つ新しいインデックスを作成します。Get Index API を使用して、元のインデックスの設定とマッピングを取得できます。</p><p>2. Reindex API を使用して、ソースからフィールドを削除しながら、元のインデックスから新しいインデックスにドキュメントをコピーします。次の例は、「my_index」インデックス内のすべてのドキュメントから「field_to_delete」フィールドを削除する方法を示しています。</p>POST /_reindex
{
  "source": {
    "index": "my_index"
  },
  "dest": {
    "index": "new_index"
  },
  "script": {
    "source": "ctx._source.remove('field_to_delete')"
  }
}<p>
3. 新しいインデックスに、フィールドが削除された正しいドキュメントが含まれていることを確認します。</p><p>4. すべてが問題なければ、元のインデックスを削除し、必要に応じて、元のインデックス名を持つエイリアスを新しいインデックスに追加できます。</p><h2>方法3：マッピングの更新と再インデックス</h2><p>マッピングからフィールドとインデックス内のすべてのドキュメントを削除する場合は、マッピングを更新してからドキュメントのインデックスを再作成できます。やり方は次のとおりです:</p><p>1. 元のインデックスと同じ設定で新しいインデックスを作成します。</p><p>2. Get Mapping API を使用して、元のインデックスのマッピングを取得します。</p><p>3. 削除するフィールドを削除してマッピングを変更します。</p><p>4. Put Mapping API を使用して、変更したマッピングを新しいインデックスに適用します。</p><p>5. 方法 2 の説明に従って、Reindex API を使用して、元のインデックスから新しいインデックスにドキュメントをコピーします。</p><p>6. 新しいインデックスに、フィールドが削除された正しいドキュメントが含まれていること、およびマッピングにフィールドが存在しないことを確認します。</p><p>7. 問題がなければ元のインデックスを削除し、必要に応じて元のインデックス名でエイリアスを追加できます。</p><h2>まとめ</h2><p>この記事では、Elasticsearch のドキュメントからフィールドを削除する 3 つの方法 (Update API の使用、変更されたソースによる再インデックス、マッピングの更新と再インデックス) について説明しました。それぞれの方法には独自の使用例とトレードオフがあるため、要件に最も適したものを選択してください。変更を本番環境に適用する前に、必ず変更をテストし、結果を確認してください。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-delete-field-from-document</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-delete-field-from-document</guid>
    <category><![CDATA[基本]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8deb617c89943b69/6a17e26c4b055d209e43212f/89278eb7309b7f3018c61be2b514d1fd25b9564d-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Fri, 09 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearch のスコアリングと Explain API を理解する]]></title>
    <description><![CDATA[Elasticsearch のスコアリングメカニズムと、Explain API を使用して検索する関連性を監査し、ドキュメントのランキングを向上させるための実用的なスコアリング機能について学びます。]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch は、インデックス内の各ドキュメントのスコアを計算して、高速かつ関連性の高い検索結果を提供する強力な検索エンジンです。このスコアは検索結果の順序を決定する上で重要な要素となります。この記事では、Elasticsearch のスコアリング メカニズムを詳しく説明し、スコアリング プロセスを理解するのに役立つ Explain API について説明します。</p><h2>Elasticsearchのスコアリングメカニズム</h2><p>Elasticsearch は、デフォルトで Practical Scoring Function (BM25) と呼ばれるスコアリング モデルを使用します。このモデルは確率的情報検索理論に基づいており、用語頻度、逆文書頻度、フィールド長の正規化などの要素を考慮に入れています。これらの要因について簡単に説明しましょう。</p><ol><li><p><strong>用語頻度 (TF):</strong>これは、ドキュメント内で用語が出現する回数を表します。用語の頻度が高いほど、用語とドキュメントの関係が強くなることを示します。</p></li><li><p><strong>逆文書頻度 (IDF):</strong>この要素は、文書コレクション全体における用語の重要度を測定します。多くのドキュメントに出現する用語は重要度が低いとみなされ、より少ないドキュメントに出現する用語は重要度が高いとみなされます。</p></li><li><p><strong>フィールド長の正規化</strong>: この要素は、用語が表示されるフィールドの長さを考慮します。短いフィールドでは用語がより重要であるとみなされるため、短いフィールドにはより大きな重みが与えられます。</p></li></ol><h2>Explain APIの使用</h2><p>Elasticsearch の Explain API は、スコアリング プロセスを理解するための貴重なツールです。特定のドキュメントのスコアがどのように計算されたかについての詳細な説明を提供します。Explain API を使用するには、次のエンドポイントに GET リクエストを送信する必要があります。</p>GET /&lt;index&gt;/_explain/&lt;document_id&gt;<p>リクエスト本文には、スコアリングを理解したいクエリを指定する必要があります。次に例を示します。</p>{
  "query": {
    "match": {
      "title": "elasticsearch"
    }
  }
}<p>Explain API からの応答には、個々の要素 (TF、IDF、フィールド長の正規化) とそれらが最終スコアに与える影響など、スコアリング プロセスの詳細な内訳が含まれます。応答の例は次のとおりです。</p>{
  "_index": "example_index",
  "_type": "_doc",
  "_id": "1",
  "matched": true,
  "explanation": {
    "value": 1.2,
    "description": "weight(title:elasticsearch in 0) [PerFieldSimilarity], result of:",
    "details": [
      {
        "value": 1.2,
        "description": "score(doc=0,freq=1.0 = termFreq=1.0\n), product of:",
        "details": [
          {
            "value": 2.2,
            "description": "idf, computed as log(1 + (docCount - docFreq + 0.5) / (docFreq + 0.5)) from:",
            "details": [
              {
                "value": 1,
                "description": "docFreq",
                "details": []
              },
              {
                "value": 1,
                "description": "docCount",
                "details": []
              }
            ]
          },
          {
            "value": 0.5,
            "description": "tfNorm, computed as (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength)) from:",
            "details": [
              {
                "value": 1,
                "description": "termFreq=1.0",
                "details": []
              },
              {
                "value": 1.2,
                "description": "parameter k1",
                "details": []
              },
              {
                "value": 0.75,
                "description": "parameter b",
                "details": []
              },
              {
                "value": 1,
                "description": "avgFieldLength",
                "details": []
              },
              {
                "value": 1,
                "description": "fieldLength",
                "details": []
              }
            ]
          }
        ]
      }
    ]
  }
}<p>この例では、応答は、スコア 1.2 が IDF 値 (2.2) と tfNorm 値 (0.5) の積であることを示しています。詳細な説明は、スコアに影響を与える要因を理解するのに役立ち、検索の関連性を微調整するのに役立ちます。</p><h2>まとめ</h2><p>Elasticsearch スコアリングは、関連性の高い検索結果を提供する上で重要な要素です。スコアリング メカニズムを理解し、Explain API を使用することで、検索結果に影響を与える要因についての洞察を得て、検索クエリを最適化し、関連性とパフォーマンスを向上させることができます。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-scoring-and-explain-api</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-scoring-and-explain-api</guid>
    <category><![CDATA[基本]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbe7de1872f1527e3/6a17de303e9e452974ba1374/a70c5403064d5bbceff66a17373332362227f13c-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 05 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearch のインデックステンプレート: 構成可能なテンプレートの使い方]]></title>
    <description><![CDATA[Elasticsearchでコンポーザブルおよびコンポーネントインデックステンプレートを作成する方法を探り、マッピングの一貫性を確保し、インデックス設定を自動化する方法を学びましょう。]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch インデックスは、マッピング、設定、エイリアスを通じて構成できます。</p><ul><li><p>マッピング定義はデータ スキーマを指定します。</p></li><li><p>設定では、シャードのサイズと更新レートを設定します。</p></li><li><p>エイリアスは、インデックスに別の名前を付けるために使用されます。</p></li></ul><p>初めてドキュメントのインデックスを作成するとき、または Create Index API を使用して空のインデックスを作成するときは、データ スキーマとエイリアスのないデフォルト設定でインデックスが作成されます。これらのデフォルトは開発環境やテスト環境では適切に機能しますが、実稼働環境の場合はインデックスをカスタマイズする必要がある場合があります。</p><p>運用環境でデフォルトのマッピングと設定を使用すると、インデックス作成と検索のパフォーマンスが低下する可能性があります。インデックスを手動でインスタンス化するのは面倒で時間のかかるプロセスです。複雑なマッピング スキーマやカスタマイズされた設定およびエイリアスがある場合、このようなインデックスをすべての環境で再作成することは特に非現実的です。</p><p>幸いなことに、Elasticsearch には、<em>インデックス</em><em>テンプレートの形式でインデックスを作成するときに、事前定義された構成を自動的に適用するツールが用意されています。</em></p><h2>インデックステンプレート</h2><p>インデックス テンプレートを使用すると、ユーザー定義の構成でインデックスを作成できます。インデックスは、インスタンス化中に、これらのテンプレートから構成 (シャードとレプリカの数の設定、フィールド マッピングなど) を取得できます。テンプレートは、名前パターンといくつかの構成で定義されます。インデックスの名前がテンプレートの命名パターンと一致する場合、テンプレートで定義された構成で新しいインデックスが作成されます。</p><p>Elasticsearch はバージョン 7.8 で、コンポーザブル テンプレートを使用してテンプレート機能をアップグレードしました。この新しいバージョンでは、この記事で示されているように、より再利用可能なインデックス テンプレートが提供されます。</p><h3>インデックステンプレートの種類</h3><p>インデックス テンプレートは、次の 2 つのカテゴリに分類できます。</p><ul><li><p><strong>インデックス テンプレート (または構成可能なインデックス テンプレート)</strong> : 構成可能なインデックス テンプレートは、単独で存在することも、0 個以上のコンポーネント テンプレートで構成することもできます (2 番目のカテゴリを参照)。</p></li><li><p><strong>コンポーネント テンプレート:</strong>コンポーネント テンプレートは、必要な構成を定義する、それ自体が<em>再利用可能な</em>テンプレートです。通常、コンポーネント テンプレートはインデックス テンプレートに関連付けられることが想定されます。各コンポーネント テンプレートには、1 つまたは複数のインデックス テンプレートを添付できます。</p></li></ul><p>下の画像でわかるように、インデックス テンプレート A と B はコンポーネント テンプレート (この場合はテンプレート 3 の 1 つだけ) を共有しています。インデックス テンプレートは、0 個以上のコンポーネント テンプレートで構成でき、各コンポーネント テンプレートは、0 個以上のインデックス テンプレートに関連付けることができます。どちらのタイプのテンプレートも単独で存在できますが、コンポーネント テンプレートはインデックス テンプレートに添付されない限り役に立ちません。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7fca132e0eb86c50/6a17f5b7ec0f8982a65a678c/96c0aac29d3992e54a79be34e14cf909e0ca2ea9-1202x556.png" alt="Elasticsearchのインデックステンプレートとそのコンポーネント。" /><p>基本的な考え方は、組織がさまざまなニーズに合わせて使用できるコンポーネント テンプレートのカタログを開発し (たとえば、個々の環境に合わせてさまざまなコンポーネント テンプレートを指定する)、それらを構成可能なインデックス テンプレートを介してさまざまなインデックスに添付することです。</p><h2>構成可能な（インデックス）テンプレートを作成する方法</h2><p>Elasticsearch は、インデックス テンプレートを管理するための _index_template エンドポイントを提供します。ユーザーは、このテンプレートでインデックス名パターンとともに、必要なすべてのマッピング、設定、エイリアスを指定します。注文生成ロジックを担当するマイクロサービス アプリケーション<em>customer-order-service</em>のテンプレートを作成する例を見てみましょう。</p><p>ワイルドカード *orders を含むパターンで表される顧客注文のテンプレートを作成する必要があるとします。このテンプレートには、order_date フィールド、シャード、レプリカ番号などの特定のマッピングと設定が含まれている必要があります。</p><p>作成中にこのテンプレートと一致するインデックスはすべて、このテンプレートで定義された構成を継承します。たとえば、black_friday_orders インデックスには order_date フィールドがあり、シャードは 5 に設定され、レプリカは 2 に設定されます。これに加えて、このテンプレートから作成された<em>すべての</em>インデックスも単一の<a href="https://opster.com/guides/elasticsearch/glossary/elasticsearch-alias/">エイリアス</a>名を継承します。*orders として定義されたインデックス パターンと、定義済みの日付形式 dd-MM-yyyy を持つ単一の oder_date フィールドで構成されるマッピング スキーマを使用して、この orders_template を作成しましょう。以下のコードは、このインデックス テンプレートを作成する方法を示しています。</p>PUT _index_template/orders_template
{
  "index_patterns": ["*orders"],
  "priority": 300,
  "template": {
    "mappings": {
      "properties": {
        "order_date": {
          "type": "date",
          "format":"dd-MM-yyyy"
        }
      }
    },
    "settings":{
      "number_of_shards":5,
      "number_of_replicas":2
    },
    "aliases":{
      "all_orders":{}
    }
  }
}<p>Kibana の DevTools でこのクエリを実行すると、事前定義されたマッピング、設定、エイリアスとともに、インデックス パターン *orders を使用してテンプレートが作成されます。index_patterns は一致パターンの配列です。このパターンに一致するインデックスはテンプレート構成を派生します。実行した内容を繰り返す永続テンプレートを取得するには、以下を実行します。</p>GET _index_template/orders_template <p>テンプレートに定義されたテンプレート属性を作成するときに定義される、正の数値の優先度もあります。すべてのテンプレートには優先度が定義されるため、異なるテンプレートからの競合する変更は、この値を使用して解決され、より高い優先度の値が優先されます。テンプレートの優先順位については、以下でさらに詳しく説明します。</p><h2>テンプレートを使用してインデックスを作成する</h2><p>これで、インデックスを作成するための設計図であるテンプレートができました。次のステップは、インデックスを作成することです。インデックスの名前が指定されたパターンと一致すると、テンプレート化された構成が自動的に適用されます。この点を証明するために、以下のコードに示すように、blackfriday_orders という名前の新しいインデックスを作成しましょう。</p>PUT blackfriday_orders<p>インデックスの名前（blackfriday_orders）はテンプレートで定義された命名パターンと一致します（つまり*orders) の場合、インデックスはテンプレートから派生したすべての構成を取得する必要があります。この新しく作成されたインデックスを取得し、次のコードを実行してこれが本当に当てはまるかどうかを確認しましょう。</p>GET blackfriday_orders<p>次のように返されます:</p>{
  "blackfriday_orders" : {
    "aliases" : {
      "all_orders" : { }
    },
    "mappings" : {
      "properties" : {
        "order_date" : {
          "type" : "date",
          "format" : "dd-MM-yyyy"
        }
      }
    },
    "settings" : {
      "index" : {
         ...
        "number_of_shards" : "5",
        "number_of_replicas" : "2"
      }
    }
  }
}<p>応答が示すように、blackfriday_orders の構成はテンプレートから継承されています。テンプレート構成を正常に継承するインデックスのさまざまな組み合わせを試すことができます。</p>PUT blackfriday_orders
PUT americaorders
PUT cancelled--orders
PUT undefined101orders<p>ただし、次のインデックスは名前がパターンと一致しないため、構成を継承しません。</p>PUT blackfriday_orders2
PUT open_orders_
PUT allorders_total<p>覚えておくべき重要な点の 1 つは、この場合、テンプレートから派生したすべてのインデックスが同じエイリアス (all_orders) を持つことです。このようなエイリアスを使用すると、複数のインデックスではなく、この単一のエイリアスに対してクエリを実行できるという利点があります。</p>GET blackfriday_orders,americaorders,undefined101orders/_search
GET all_orders/_search 
{
  "query": {
    "range": {
      "order_date": {
        "gte": "01-12-2021",
        "lte": "31-12-2021"
      }
    }
  }
}<p>*orders のテンプレートを作成する際、一致するインデックスはテンプレート構成を採用することが期待されます。通常、チームは、意識的か無意識的かを問わず、さまざまな理由でさらにいくつかのテンプレートを作成することがあります。つまり、インデックス名が 2 つの異なるテンプレート パターンと一致する場合があるということです。Elasticsearch は、これらのテンプレートからどの構成を適用する必要があるかを決定する必要があります。幸いなことに、このジレンマはテンプレートの優先順位を使用することで解決できます。</p><h2>コンポーネントテンプレートの作成方法</h2><p>この記事の前半でインデックス テンプレートについて学習しました。構成が組み込まれたテンプレートを作成することにはいくつかの欠点があります。その 1 つは、構成を他のテンプレートにエクスポートできないことです。たとえば顧客関連のテンプレート（*customers）に対して同様の構成を希望する場合は、テンプレート全体を再作成する必要がある場合があります。つまり、典型的な組織では数十個のコンポーネントが作成されることになります (環境によっては、さらに数個になることもあります)。</p><p>私たちは常に再利用性を重視しているため、Elasticsearch は再利用性を念頭に置いてテンプレートを再設計しました。コンポーネント テンプレートはまさにその要件を満たしています。DevOps の経験がある場合、環境ごとに事前設定された構成でインデックスを作成する必要がある可能性が高くなります。これらの各構成を手動で面倒に適用するのではなく、環境ごとにコンポーネント テンプレートを作成できます。</p><p>コンポーネント テンプレートは、より多くのインデックス テンプレートを作成するために使用できる再利用可能な構成ブロックです。コンポーネント テンプレートは、インデックス テンプレートと組み合わせない限り価値がないことに注意してください。これらは _component_template エンドポイントを介して公開されます。これらすべてがどのように組み合わさるかを見てみましょう。</p><h3>インデックステンプレート内の設定</h3><p>先ほどインデックス テンプレートで定義した設定を抽出し、そこからコンポーネント テンプレートを作成しましょう。settings_component_template には、プライマリ シャードごとに 2 つのレプリカを持つ 5 つのプライマリ シャードがあることが想定されています。最初のステップは、以下のコード リストに示すように、この構成でコンポーネント テンプレートを宣言して実行することです。</p>PUT _component_template/settings_component_template
{
  "template":{
    "settings":{
      "number_of_shards":5,
      "number_of_replicas":2
    }
  }
}<p>上記のコードが示すように、_component_template エンドポイントを使用してコンポーネント テンプレートを作成します。リクエストの本文には、テンプレート オブジェクト内のテンプレート情報が保持されます。これで、settings_component_template はインデックス テンプレートの他の場所でも使用できるようになりました。注目すべき違いの 1 つは、このテンプレートではインデックス パターンが定義されていないことです。これは、いくつかのプロパティを構成する単なるコード ブロックです。</p><h3>マッピングテンプレート</h3><p>同じように、もう一つテンプレートを作成しましょう。今回は、スタンドアロン インデックス テンプレートで以前に定義したマッピング スキーマを抽出しましょう。以下のコードはスクリプトを示しています。</p>PUT _component_template/mappings_component_template
{
  "template": {
    "mappings": {
      "properties": {
        "order_date": {
          "type": "date",
          "format":"dd-MM-yyyy"
        }
      }
    }
  }
}<h3>エイリアステンプレート</h3><p>同じフローで、エイリアス（2 つのエイリアス（all_orders と sales_orders））を持つコンポーネント テンプレートも作成できます。</p>PUT _component_template/aliases_component_template
{
  "template": {
    "aliases": {
      "all_orders": {},
      "sales_orders":{}
    }
  }
}<h3>構成可能なインデックステンプレート</h3><p>これで 3 つのコンポーネント テンプレートができたので、次のステップではそれらを使用します。これを実現するには、たとえば christmas_orders のインデックス テンプレートでこれを使用できるようにします。</p>PUT _index_template/composed_orders_template
{
  "index_patterns": [
    "*orders"
  ],
  "priority": 500,
  "composed_of": [
    "settings_component_template",
    "mappings_component_template",
    "aliases_component_template"
  ]
}<p>compose_of タグは、このテンプレートを構成するすべてのコンポーネント テンプレートのコレクションです。この場合は、設定、マッピング、エイリアスのコンポーネント テンプレートを選択します。また、このテンプレートが他のテンプレートよりも優先されるように、優先順位を上げています。テンプレートの準備が整うと、*orders パターンに一致するすべてのインデックスは、これら 3 つのコンポーネント テンプレートから構成を継承します。</p><p>そうは言っても、既存のテンプレート (settings_component_template) と新しく作成したエイリアス テンプレート (aliases_component_template – 以下を参照) のいずれか 1 つを使用して、新しいテンプレート (たとえば、顧客) を作成したい場合は、次のようにします。</p>PUT _component_template/aliases_component_template2
{
  "template": {
    "aliases": {
      "all_customers": {}
    }
  }
}<p>インデックス テンプレートは次のようになります。</p>PUT _index_template/composed_customers_template
{
  "index_patterns": [
    "*customers*"
  ],
  "priority": 200,
  "composed_of": [
    "settings_component_template",
    "aliases_component_template2"
  ]
}<p>settings_component_template が 2 つの異なるテンプレートで (再) 使用されていることに気付きましたか?それがコンポーネント テンプレートの力です。</p><h2>インデックステンプレートの優先度</h2><p>開発者が既存のストックを確認せずに複数のインデックス テンプレートを作成する可能性があります。これらのテンプレートそれぞれに優先順位を設定し、優先順位の高いテンプレートが使用されるようにすることが重要です。たとえば、次のコード スニペットでは、my_orders_template_1 が my_orders_template_2 をオーバーライドします。</p>PUT _index_template/my_orders_template_1
{
  "index_patterns": ["*orders"],
  "priority": 1000,
  "template": { ... }
}
PUT _index_template/my_orders_template2
{
  "index_patterns": ["*orders"],
  "priority": 300,
  "template": { ... }
}<p>作成中のインデックスに一致するテンプレートが複数ある場合、Elasticsearch は一致するすべてのテンプレートのすべての設定を適用しますが、優先度の高い設定は上書きします。</p><h2>テンプレートの優先順位</h2><p>最後に、テンプレートの優先順位について疑問に思われるかもしれません。コンポーネント テンプレートで定義された構成は、メイン インデックス テンプレート自体で定義された構成を上書きするのでしょうか。それとも逆でしょうか?まあ、いくつかルールがあります:</p><ul><li><p>明示的に構成を作成して作成したインデックスは、すべてに優先します。つまり、明示的に構成を作成してインデックスを作成した場合、テンプレートによってそのインデックスが上書きされることは想定しないでください。</p></li><li><p>レガシー テンプレート (バージョン 7.8 より前に作成されたテンプレート) は、コンポーザブル テンプレートよりも優先順位が低くなります。</p></li></ul><h2>まとめ</h2><ul><li><p>インデックスには、マッピング、設定、エイリアスが含まれます。マッピングはフィールド スキーマを定義し、設定はシャードやレプリカの数などのインデックス パラメータを設定し、エイリアスはインデックスに別名を与えます。</p></li><li><p>テンプレートを使用すると、事前定義された構成でインデックスを作成できます。特定のテンプレート内で定義されたインデックス パターンと一致する名前でインデックスに名前を付けると、そのインデックスはテンプレートに従って自動的に構成されます。</p></li><li><p>Elasticsearch はバージョン 7.8 で構成可能なインデックス テンプレートを導入しました。構成可能なインデックス テンプレートにより、テンプレートのモジュール化とバージョン管理が可能になります。</p></li><li><p>構成可能なテンプレートは、0 個以上のコンポーネント テンプレートで構成されます。</p></li><li><p>インデックス テンプレートにも独自の構成を定義することができます。</p></li><li><p>コンポーネント テンプレートは、コンポーザブル インデックス テンプレートと同様に、事前定義された構成を持つ再利用可能なテンプレートです。</p></li><li><p>ただし、コンポーネント テンプレートはインデックス テンプレートの一部であることが想定されており、インデックス テンプレートに「構成」されていない場合は役に立ちません。</p></li><li><p>コンポーネント テンプレートにはインデックス パターンが定義されていません。これが、コンポーネント テンプレートがインデックス テンプレートの一部であると「想定」されるもう 1 つの理由です。</p></li><li><p>各テンプレートには優先度（正の数字）があります。数値が大きいほど、そのテンプレートが適用される優先順位が高くなります。</p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/index-composable-templates</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/index-composable-templates</guid>
    <category><![CDATA[データのインデキシング]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt98737a72caa74fe4/6a17f5b84b055d278d43236a/510750708df50bf79463586a1bbf35bf94acfa30-1200x628.png" length="0" type="image/png"/>
    <pubDate>Fri, 02 May 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[2つのフィールドによるElasticsearch検索]]></title>
    <description><![CDATA[複数一致クエリ、boolクエリ、クエリタイムフィールドブースティングなど、2つのフィールドで検索する技術を探ります。]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch で複数のフィールドを検索することは、多くのアプリケーションで一般的な要件です。この記事では、複数一致クエリ、ブールクエリ、クエリ時のフィールドブースティングなど、2 つのフィールドで検索を実行するための高度な手法について説明します。これらのテクニックは、ユーザーにとってより正確で関連性の高い検索結果を作成するのに役立ちます。</p><h2>2つのフィールドで検索を実行する高度なテクニック</h2><h3>1. 複数一致クエリ</h3><p>複数一致クエリを使用すると、複数のフィールドにわたって単一のクエリ文字列を検索できます。これは、2 つのフィールドのいずれかに指定されたクエリ文字列を含むドキュメントを検索する場合に便利です。以下は、「title」または「description」フィールドで「example」という用語を検索する複数一致クエリの例です。</p>{
  "query": {
    "multi_match": {
      "query": "example",
      "fields": ["title", "description"]
    }
  }
}<h3>2. ブールクエリ</h3><p>bool クエリを使用すると、ブールロジックを使用して複数のクエリを組み合わせることができます。「should」句を使用すると、2 つのフィールドのいずれかでクエリに一致するドキュメントを検索できます。以下は、フィールド「title」と「description」で「example」という用語を検索するブールクエリの例です。</p>{
  "query": {
    "bool": {
      "should": [
        {"match": {"title": "example"}},
        {"match": {"description": "example"}}
      ]
    }
  }
}<h3>3. クエリ時のフィールドブースティング</h3><p>場合によっては、検索中にあるフィールドを他のフィールドよりも重視したいことがあります。これを実現するには、クエリ時にフィールドにブースト係数を適用します。ブースト値が高いほど、フィールドの重みが増し、最終的な検索スコアに影響を与える可能性が高くなります。以下は、「タイトル」フィールドにブースト係数を適用した複数一致クエリの例です。</p>{
  "query": {
    "multi_match": {
      "query": "example",
      "fields": ["title^3", "description"]
    }
  }
}<p>この例では、「タイトル」フィールドのブースト係数は 3 であり、検索スコアの決定において「説明」フィールドよりも 3 倍重要になります。</p><h3>4. 異なるブースト係数を持つクエリを組み合わせる</h3><p>bool クエリを使用して、異なるブースト係数を持つ複数のクエリを組み合わせることもできます。これにより、検索結果の各フィールドの重要性を微調整できます。以下は、「title」フィールドと「description」フィールドに異なるブースト係数を適用したブールクエリの例です。</p>{
  "query": {
    "bool": {
      "should": [
        {"match": {"title": {"query": "example", "boost": 3}}},
        {"match": {"description": {"query": "example", "boost": 1}}}
      ]
    }
  }
}<p>この例では、「タイトル」フィールドのブースト係数は 3 ですが、「説明」フィールドのブースト係数は 1 です。</p><h2>まとめ</h2><p>Elasticsearch での 2 つのフィールドによる検索は、マルチマッチ クエリ、ブール クエリ、クエリ時フィールド ブースティングなどの高度な手法を使用して実現できます。これらの技術を組み合わせることで、ユーザーにとってより正確で関連性の高い検索結果を作成できます。さまざまなクエリの組み合わせとブースト係数を試して、特定のユースケースに最適な検索構成を見つけます。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-search-by-two-fields</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-search-by-two-fields</guid>
    <category><![CDATA[基本]]></category>
    <category><![CDATA[Query DSL]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltda47d75430c4fa7c/6a17f5cae3179149242d5963/d5d04bbcfc3925f48f3487ea4c7e0dd2205316d0-720x420.jpg" length="0" type="image/jpeg"/>
    <pubDate>Wed, 30 Apr 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearch ヒープサイズの使用量と JVM ガベージコレクション]]></title>
    <description><![CDATA[Elasticsearch のヒープ サイズの使用と JVM ガベージ コレクションについて説明します。ベスト プラクティスや、ヒープ メモリの使用量が高すぎる場合や JVM のパフォーマンスが最適でない場合の問題を解決する方法も説明します。]]></description>
    <content:encoded><![CDATA[<p>ヒープ サイズは、Elasticsearch ノードの Java 仮想マシンに割り当てられる RAM の量です。</p><p>バージョン 7.11 以降、Elasticsearch はデフォルトで、ノードのロールと合計メモリに基づいて JVM ヒープ サイズを自動的に設定します。ほとんどの運用環境では、デフォルトのサイズ設定を使用することをお勧めします。ただし、JVM ヒープ サイズを手動で設定する場合は、一般的なルールとして、-Xms と -Xmx を同じ値に設定する必要があります。これは、使用可能な RAM の合計の 50% で、最大 (約) 31 GB になります。</p><p>ヒープ サイズを大きくすると、インデックス作成と検索操作に使用できるメモリがノードに多く割り当てられます。ただし、ノードにはキャッシュ用のメモリも必要なので、50% を使用すると 2 つのメモリのバランスが適切に保たれます。同じ理由から、本番環境では、Elasticsearch と同じノードで他のメモリを大量に消費するプロセスを使用することは避けてください。</p><p>通常、ヒープ使用量は鋸歯状のパターンに従い、使用されている最大ヒープの約 30 ～ 70% の間を変動します。これは、ガベージ コレクション プロセスによってメモリが再び解放されるまで、JVM がヒープ使用率を着実に増加させるためです。ガベージ コレクション プロセスが追いつかない場合、ヒープ使用率が高くなります。ヒープ使用量が高いことを示す指標は、ガベージ コレクションでヒープ使用量を約 30% まで削減できない場合です。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt03908d8eea824755/6a17dbe63e03d71e314f2b3e/0a17a67cc589a3c1fbf9e918eadc119df7bd7619-858x278.png" alt="" /><p>上の画像では、JVM ヒープの通常のノコギリ波を見ることができます。</p><p>また、ガベージ コレクションには、若い GC と古い GC の 2 種類があることもわかります。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0d527a7905c78a45/6a17dbe84b055d09484320c2/8df5c24c4894404de4617be7a13683c9027d607d-875x281.png" alt="" /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt681db7f60d9dbe40/6a17dbe97f6f152b9bc099f0/e01eb2537310b052580411153b8eddc187d97687-890x264.png" alt="" /><p>正常な JVM では、ガベージ コレクションは理想的には次の条件を満たす必要があります。</p><ul><li><p>Young GC は迅速に処理されます (50 ミリ秒以内)。</p></li><li><p>Young GC は頻繁に実行されません (約 10 秒)。</p></li><li><p>古い GC はすぐに処理されます (1 秒以内)。</p></li><li><p>古い GC は頻繁に実行されません (10 分に 1 回以上)。</p></li></ul><h3><strong>ヒープメモリ使用量が高すぎる場合やJVMパフォーマンスが最適でない場合の解決方法</strong></h3><p>ヒープ メモリの使用量が増える理由はさまざまです。</p><h4><strong>オーバーシャーディング</strong></h4><p>オーバーシャーディングに関するドキュメントは<a href="https://www.elastic.co/docs/deploy-manage/production-guidance/optimize-performance/size-shards#sizing-shard-guidelines">ここを</a>参照してください。</p><h4><strong>大規模な集約サイズ</strong></h4><p>集約サイズが大きくなるのを避けるには、クエリ内の集約バケットの数 (サイズ) を最小限に抑えます。</p>GET /_search
{
   "aggs" : {
       "products" : {
           "terms" : {
               "field" : "product",
               "size" : 5
                          }
       }
   }
}<p>低速クエリ ログ (スロー ログ) を使用し、次のように特定のインデックスに実装することができます。</p>PUT /my_index/_settings
{
   "index.search.slowlog.threshold.query.warn": "10s",
   "index.search.slowlog.threshold.query.info": "5s",
   "index.search.slowlog.threshold.query.debug": "2s",
   "index.search.slowlog.threshold.query.trace": "500ms",
   "index.search.slowlog.threshold.fetch.warn": "1s",
   "index.search.slowlog.threshold.fetch.info": "800ms",
   "index.search.slowlog.threshold.fetch.debug": "500ms",
   "index.search.slowlog.threshold.fetch.trace": "200ms",
   "index.search.slowlog.level": "info"
}<p>結果を返すのに長い時間がかかるクエリは、リソースを大量に消費するクエリである可能性が高くなります。</p><h4><strong>バルクインデックスのサイズが大きすぎる</strong></h4><p>大きなリクエストを送信する場合、ヒープ消費量が多くなる原因となる可能性があります。一括インデックス要求のサイズを小さくしてみてください。</p><h4><strong>マッピングの問題</strong></h4><p>特に、「fielddata: true」を使用する場合、これが JVM ヒープの主要なユーザーになる可能性があります。</p><h4><strong>ヒープサイズが正しく設定されていません</strong></h4><p>ヒープ サイズは次のように手動で定義できます。</p><p>環境変数の設定:</p>ES_JAVA_OPTS="-Xms2g -Xmx2g"<p>Elasticsearch 構成ディレクトリ内の jvm.options ファイルを編集します。</p>-Xms2g
-Xmx2g<p>環境変数の設定はファイルの設定よりも優先されます。</p><p>設定を有効にするにはノードを再起動する必要があります。</p><h4><strong>JVM の新しい比率が正しく設定されていません</strong></h4><p>Elasticsearch はデフォルトでこの値を設定するため、通常はこれを設定する必要はありません。このパラメータは、JVM 内の「新世代」オブジェクトと「旧世代」オブジェクトに使用可能なスペースの比率を定義します。</p><p>古い GC が非常に頻繁に発生していることがわかった場合は、Elasticsearch 構成ディレクトリの jvm.options ファイルでこの値を具体的に設定してみてください。</p>-XX:NewRatio=3<h3><strong>大規模な Elasticsearch クラスターでヒープサイズの使用量と JVM ガベージコレクションを管理するためのベストプラクティスは何ですか?</strong></h3><p>大規模な Elasticsearch クラスターでヒープ サイズの使用量と JVM ガベージ コレクションを管理するためのベスト プラクティスは、ヒープ サイズが使用可能な RAM の最大 50% に設定され、JVM ガベージ コレクション設定が特定のユース ケースに合わせて最適化されていることを確認することです。クラスターが最適に実行されていることを確認するには、ヒープ サイズとガベージ コレクション メトリックを監視することが重要です。具体的には、JVM ヒープ サイズ、ガベージ コレクション時間、ガベージ コレクションの一時停止を監視することが重要です。さらに、ガベージ コレクション サイクルの数とガベージ コレクションに費やされた時間を監視することも重要です。これらのメトリックを監視することで、ヒープ サイズやガベージ コレクションの設定に関する潜在的な問題を特定し、必要に応じて修正措置を講じることができます。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-heap-size-jvm-garbage-collection</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-heap-size-jvm-garbage-collection</guid>
    <category><![CDATA[基本]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc58290fbc9f4efb9/6a1705f97d8d67cae970e632/b162c28623b9070fd1980bcd891b9dd1e868f2f0-720x421.jpg" length="0" type="image/jpeg"/>
    <pubDate>Tue, 22 Apr 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearchでプライマリシャード数を増やす方法]]></title>
    <description><![CDATA[最適なシャードスケーリングを実現するために、分割APIと再インデックスAPIを使用してElasticsearchのプライマリシャード数を増やす方法を学びます。]]></description>
    <content:encoded><![CDATA[<p>既存のインデックスのプライマリ シャード数を増やすことはできません。つまり、プライマリ シャード数を増やす場合は、インデックスを再作成する必要があります。このような状況で一般的に使用される方法は 2 つあります。_reindex API と _split API です。</p><p>_split API は、多くの場合、_reindex API よりも高速な方法です。両方の操作の前に<strong>インデックス作成を</strong><strong>停止する必要があります</strong>。そうしないと、source_index と target_index のドキュメント数が異なります。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt46dd6abe0e6fe1eb/6a17e368148009d6a7b486d3/aa0ae010c2f5691ca00440fb453ed6b47bacd24f-1200x628.png" alt="Elasticsearchのシャード数を増やすためにインデックスを再作成" /><h2>方法1 – 分割APIを使用する</h2><p>分割 API は、設定をコピーし、既存のインデックスをマッピングすることで、必要な数のプライマリ シャードを持つ新しいインデックスを作成するために使用されます。作成時に必要なプライマリ シャードの数を設定できます。分割 API を実装する前に、次の設定を確認する必要があります。</p><ol><li><p>ソース インデックスは読み取り専用である必要があります。これは、インデックス作成プロセスを停止する必要があることを意味します。</p></li><li><p>ターゲット インデックス内のプライマリ シャードの数は、ソース インデックス内のプライマリ シャードの数の倍数である必要があります。たとえば、ソース インデックスに 5 つのプライマリ シャードがある場合、ターゲット インデックスのプライマリ シャードを 10、15、20 などに設定できます。</p></li></ol><p>注: プライマリ シャード番号のみを変更する必要がある場合は、再インデックス API よりもはるかに高速な分割 API が推奨されます。</p><h3>分割APIの実装</h3><p>テストインデックスを作成します。</p>POST test_split_source/_doc
{
  "test": "test"
}<p>分割するには、ソース インデックスが読み取り専用である必要があります。</p>PUT test_split_source/_settings
{
  "index.blocks.write": true
}<p>設定とマッピングはソース インデックスから自動的にコピーされます。</p>POST /test_split_source/_split/test_split_target
{
  "settings": {
    "index.number_of_shards": 3
  }
}<p>進捗状況は以下で確認できます:</p>GET _cat/recovery/test_split_target?v&amp;h=index,shard,time,stage,files_percent,files_total<p>設定とマッピングはソース インデックスからコピーされるため、ターゲット インデックスは読み取り専用になります。ターゲット インデックスへの書き込み操作を有効にしましょう。</p>PUT test_split_target/_settings
{
    "index.blocks.write": null
}<p>元のインデックスを削除する前に、ソース インデックスとターゲット インデックスの docs.count を確認します。</p>GET _cat/indices/test_split*?v&amp;h=index,pri,rep,docs.count<p>インデックス名とエイリアス名を同じにすることはできません。ソース インデックスを削除し、ソース インデックス名をターゲット インデックスのエイリアスとして追加する必要があります。</p>DELETE test_split_source
PUT /test_split_target/_alias/test_split_source<p><strong>test_split_source</strong>エイリアスを<strong>test_split_target</strong>インデックスに追加した後、次のようにテストする必要があります。</p>GET test_split_source
POST test_split_source/_doc
{
  "test": "test"
}<h2>方法2 – 再インデックスAPIを使用する</h2><p>Reindex API を使用して新しいインデックスを作成すると、任意の数のプライマリ シャード カウントを指定できます。意図した数のプライマリ シャードで新しいインデックスを作成した後、ソース インデックス内のすべてのデータをこの新しいインデックスに再インデックスできます。</p><p>分割 API 機能に加えて、再インデックス AP の ingest_pipeline を使用してデータを操作することもできます。取り込みパイプラインでは、フィルターに適合する指定されたフィールドのみがクエリを使用してターゲット インデックスにインデックス付けされます。データの内容は簡単なスクリプトを使用して変更でき、複数のインデックスを 1 つのインデックスにマージできます。</p><h3>再インデックスAPIの実装</h3><p>テストの再インデックスを作成します。</p>POST test_reindex_source/_doc
{
    "test": "test"
}<p>ソース インデックスから設定とマッピングをコピーします。</p>GET test_reindex_source<p>設定、マッピング、および必要なシャード数を使用してターゲット インデックスを作成します。</p>PUT test_reindex_target
{
  "mappings" : {},
  "settings": {
    "number_of_shards": 10,
    "number_of_replicas": 0,
    "refresh_interval": -1
  }
}<p>*注: number_of_replicas: 0 および refresh_interval: -1 を設定すると、再インデックスの速度が向上します。</p><p>再インデックスプロセスを開始します。requests_per_second=-1 および slices=auto を設定すると、再インデックス速度が調整されます。</p>POST _reindex?requests_per_second=-1&amp;slices=auto&amp;wait_for_completion=false
{
  "source": {
    "index": "test_reindex_source"
  },
  "dest": {
    "index": "test_reindex_target"
  }
}<p>再インデックス API を実行すると、task_id が表示されます。それをコピーして、_tasks API で確認します。</p>GET _tasks/&lt;task_id&gt;<p>再インデックスが完了したら設定を更新します。</p>PUT test_reindex_target/_settings
{
  "number_of_replicas": 1,
  "refresh_interval": "1s"
}<p>元のインデックスを削除する前に、ソース インデックスとターゲット インデックスの docs.count が同じであることを確認します。</p>GET _cat/indices/test_reindex_*?v&amp;h=index,pri,rep,docs.count<p>インデックス名とエイリアス名を同じにすることはできません。ソース インデックスを削除し、ソース インデックス名をターゲット インデックスのエイリアスとして追加します。</p>DELETE test_reindex_source
PUT /test_reindex_target/_alias/test_reindex_source<p>test_split_source エイリアスを test_split_target インデックスに追加した後、次のコマンドを使用してテストします。</p>GET test_reindex_source<h2>まとめ</h2><p>既存のインデックスのプライマリ シャード数を増やす場合は、新しいインデックスへの設定とマッピングを再作成する必要があります。これを行うには、主に reindex API と split API という 2 つの方法があります。どちらの方法を使用する前にも、アクティブなインデックス作成を停止する必要があります。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-increase-primary-shard-count</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-increase-primary-shard-count</guid>
    <category><![CDATA[基本]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta8aa774fc00d7233/6a17e223dbb4ff68b3fb5611/7034b76019a0cba52c25eda29fceb18afc96ed0b-720x420.png" length="0" type="image/png"/>
    <pubDate>Thu, 17 Apr 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearch の異なるバージョン間およびクラスター間でデータを移行する方法]]></title>
    <description><![CDATA[Elasticsearch のバージョンとクラスター間でデータを転送する方法を検討します。]]></description>
    <content:encoded><![CDATA[<p>Elasticsearch クラスターをアップグレードする場合、新しい別のクラスターを作成し、古いクラスターから新しいクラスターにデータを転送する方が簡単な場合があります。これにより、ユーザーは、ダウンタイムやデータ損失のリスクなしに、すべてのアプリケーションを使用して新しいクラスター上のすべてのデータと構成をテストできるという利点が得られます。</p><p>このアプローチの欠点は、ハードウェアの重複が必要となり、すべてのデータをスムーズに転送および同期する際に困難が生じる可能性があることです。</p><p>アプリケーションをあるデータ センターから別のデータ センターに移行する必要がある場合にも、同様の手順を実行する必要がある場合があります。</p><p>この記事では、Elasticsearch クラスター間でデータを転送する 3 つの方法について詳しく説明します。</p><p><strong>Elasticsearch クラスター間でデータを移行するにはどうすればよいですか?</strong></p><p>Elasticsearch クラスター間でデータを転送する方法は 3 つあります。</p><ol><li><p><a href="https://www.elastic.co/jp/search-labs/blog/elasticsearch-migrate-data-versions-clusters#1.-reindexing-data-from-a-remote-cluster">リモートクラスタからの再インデックス</a></p></li><li><p><a href="https://www.elastic.co/jp/search-labs/blog/elasticsearch-migrate-data-versions-clusters#2.-transferring-data-using-snapshots">スナップショットを使用したデータ転送</a></p></li><li><p><a href="https://www.elastic.co/jp/search-labs/blog/elasticsearch-migrate-data-versions-clusters#3.-transferring-data-using-logstash">Logstash を使用したデータ転送</a></p></li></ol><p>通常、スナップショットを使用するのが、データを転送する最も高速かつ信頼性の高い方法です。ただし、スナップショットは同等以上のバージョンのクラスターにのみ復元でき、メジャー バージョンが 1 つ以上異なるクラスターには復元できないことに注意してください。つまり、6.x スナップショットを 7.x クラスターに復元することはできますが、8.x クラスターには復元できません。</p><p>メジャー バージョンを 1 つ以上増やす必要がある場合は、インデックスを再作成するか、Logstash を使用する必要があります。</p><p>ここで、Elasticsearch クラスター間でデータを転送するための 3 つのオプションをそれぞれ詳しく見ていきましょう。</p><h2>1. リモートクラスタからのデータの再インデックス</h2><p>再インデックスを開始する前に、新しいクラスター上のすべてのインデックスに対して適切なマッピングを設定する必要があることに注意してください。そのためには、適切なマッピングを使用してインデックスを直接作成するか、インデックス テンプレートを使用する必要があります。</p><h3>リモートからの再インデックス - 設定が必要</h3><p>リモートから再インデックスを行うには、データを受信しているクラスターの elasticseearch.yml ファイルに以下の構成を追加する必要があります。Linux システムでは、このファイルは、通常、/etc/elasticsearch/elasticsearch.yml にあります。追加する構成は次のとおりです。</p>reindex.remote.whitelist: "192.168.1.11:9200"<p>SSL を使用している場合は、各ノードに CA 証明書を追加し、elasticsearch.yml 内の各ノードのコマンドに以下を含める必要があります。</p>reindex.ssl.certificate_authorities: “/path/to/ca.pem”<p>あるいは、SSL 検証を無効にするために、すべての Elasticsearch ノードに以下の行を追加することもできます。ただし、このアプローチは前のオプションほど安全ではないため、あまりお勧めできません。</p>reindex.remote.whitelist: "192.168.1.11:9200"
reindex.ssl.verification_mode: none
systemctl restart elasticsearch service <p>すべてのノードでこれらの変更を行い、ローリング再起動を実行する必要があります。その方法の詳細については、<a href="https://www.elastic.co/jp/guide/en/elasticsearch/reference/8.17/restart-cluster.html#restart-cluster-rolling">ガイド</a>をご覧ください。</p><h3>再インデックスコマンド</h3><p>elasticsearch.yml ファイルでリモート ホストを定義し、必要に応じて SSL 証明書を追加したら、以下のコマンドでデータの再インデックスを開始できます。</p>POST _reindex
{
  "source": {
    "remote": {
      "host": "http://192.168.1.11:9200",
      "username": "elastic",
      "password": "123456",
     "socket_timeout": "1m",
      "connect_timeout": "1m"

    },
    "index": "companydatabase"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}<p>その際、タイムアウト エラーが発生する可能性があるため、デフォルトに頼るのではなく、タイムアウトに余裕を持った値を設定すると便利な場合があります。</p><p>ここで、リモートから再インデックスするときに発生する可能性のあるその他の一般的なエラーを見てみましょう。</p><h3>リモートからの再インデックス時によくあるエラー</h3><h4>1. 再インデックスがホワイトリストに登録されていない</h4>{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "[192.168.1.11:9200] not whitelisted in reindex.remote.whitelist"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "[192.168.1.11:9200] not whitelisted in reindex.remote.whitelist"
  },
  "status": 400
}<p>このエラーが発生した場合は、上記のように Elasticsearch でリモート ホストの IP アドレスまたはノード名 DNS を定義しなかったか、Elasticsearch サービスの再起動を忘れたことを示しています。</p><p>Elasticsearch クラスターでこの問題を修正するには、リモート ホストをすべての Elasticsearch ノードに追加し、Elasticsearch サービスを再起動する必要があります。</p><h4>2. SSLハンドシェイク例外</h4>{
  "error": {
    "root_cause": [
      {
        "type": "s_s_l_handshake_exception",
        "reason": "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"
      }
    ],
    "type": "s_s_l_handshake_exception",
    "reason": "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",
    "caused_by": {
      "type": "validator_exception",
      "reason": "PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",
      "caused_by": {
        "type": "sun_cert_path_builder_exception",
        "reason": "unable to find valid certification path to requested target"
      }
    }
  },
  "status": 500
}<p>このエラーは、上記のように elasticsearch.yml に reindex.ssl.certificate_authorities を追加するのを忘れたことを意味します。追加するには:</p>#elasticsearch.yml
reindex.ssl.certificate_authorities: "/path/to/ca.pem"<h2>2. スナップショットを使用したデータ転送</h2><p>前述のように、スナップショットは同等以上のバージョンのクラスタにのみ復元でき、1つ以上のメジャーバージョンの違いがあるクラスタには復元できないことに注意してください。</p><p>メジャー バージョンを 1 つ以上増やす必要がある場合は、インデックスを再作成するか、Logstash を使用する必要があります。</p><p>スナップショットを介してデータを転送するには、次の手順が必要です。</p><p>ステップ 1. 最初の Elasticsearch クラスターにリポジトリ プラグインを追加する – スナップショットを介してクラスター間でデータを転送するには、新しいクラスターと古いクラスターの両方からリポジトリにアクセスできることを確認する必要があります。通常、AWS、Google、Azure などのクラウド ストレージ リポジトリがこれに最適です。スナップショットを撮るには、<a href="https://www.elastic.co/jp/guide/en/elasticsearch/reference/current/snapshot-restore.html">ガイド</a>を参照して、そこに記載されている手順に従ってください。</p><p>ステップ 2. Elasticsearch サービスを再起動します (ローリング再起動)。</p><p>ステップ 3. 最初の Elasticsearch クラスターのリポジトリを作成します。</p><p>ステップ 4 - リポジトリ プラグインを 2 番目の Elasticsearch クラスターに追加します。</p><p>ステップ 5 - リポジトリを 2 番目の Elasticsearch クラスターに読み取り専用として追加する - 最初の Elasticsearch クラスターを作成するときに実行したのと同じ手順を繰り返して、リポジトリを追加する必要があります。</p><p>重要な注意: 2 番目の Elasticsearch クラスターを同じ AWS S3 リポジトリに接続する場合は、リポジトリを読み取り専用リポジトリとして定義する必要があります。</p>PUT _snapshot/my_s3_repository
{
  "type": "s3",
  "settings": {
    "bucket": "my-analytic-data",
    "endpoint": "s3.eu-de.cloud-object-storage.appdomain.cloud",
    "readonly": "true"
  }
}<p>これは、同じスナップショットリポジトリ内で Elasticsearch のバージョンが混在するリスクを回避するために重要です。</p><p>ステップ 6 - 2 番目の Elasticsearch クラスターへのデータの復元 - 上記の手順を実行した後、データを復元して新しいクラスターに転送できます。新しいクラスターにデータを復元するには、<a href="https://www.elastic.co/jp/guide/en/elasticsearch/reference/current/snapshot-restore.html">この記事</a>に記載されている手順に従ってください。</p><h2>3. Logstash を使用したデータ転送</h2><p>logstash を使用してデータの転送を開始する前に、新しいクラスター上のすべてのインデックスに対して適切なマッピングを設定する必要があることに注意してください。そのためには、インデックスを直接作成するか、インデックス テンプレートを使用する必要があります。</p><p>2 つの Elasticsearch クラスター間でデータを転送するには、一時的な Logstash サーバーをセットアップし、それを使用して 2 つのクラスター間でデータを転送できます。小規模なクラスターの場合、2GB の RAM インスタンスで十分です。より大規模なクラスターの場合は、8GB の RAM を搭載した 4 コア CPU を使用できます。</p><p>Logstash のインストールに関するガイダンスについては、<a href="https://www.elastic.co/jp/guide/en/logstash/current/installing-logstash.html">こちらをご覧</a>ください。</p><h3>あるクラスターから別のクラスターにデータを転送するための Logstash 構成</h3><p>クラスター A からクラスター B に単一のインデックスをコピーするための基本構成は次のとおりです。</p>iinput
{
elasticsearch
      {
        hosts =&gt; ["192.168.1.11:9200"]
        index =&gt; "index_name"
       docinfo =&gt; true      
      }
}

output 
{
  elasticsearch {
        hosts =&gt; "https://192.168.1.12:9200"
        index =&gt; "index_name"
        
  }
}<p>セキュアな elasticsearch の場合は、以下の構成を使用できます。</p>input
{
  elasticsearch
      {
        hosts =&gt; ["192.168.1.11:9200"]
        index =&gt; "index_name"
        docinfo =&gt; true 
        user =&gt; "elastic"
        password =&gt; "elastic_password"
        ssl =&gt; true
        ssl_certificate_verification =&gt; false
            
      }
}

output 
{
  elasticsearch {
        hosts =&gt; "https://192.168.1.12:9200"
        index =&gt; "index_name"
        user =&gt; "elastic"
        password =&gt; "elastic_password"
        ssl =&gt; true
        ssl_certificate_verification =&gt; false
  }
}<h3>インデックスメタデータ</h3><p>上記のコマンドは、単一の名前付きインデックスに書き込みます。複数のインデックスを転送し、インデックス名を保持する場合は、Logstash 出力に次の行を追加する必要があります。</p>index =&gt; "%{[@metadata][_index]}"<p>また、ドキュメントの元の ID を保持したい場合は、以下を追加する必要があります。</p>document_id =&gt; "%{[@metadata][_id]}"<p>ドキュメント ID を設定するとデータ転送速度が大幅に低下することに注意してください。必要な場合にのみ元の ID を保持してください。</p><h2>更新の同期</h2><p>上記の方法はすべて比較的長い時間がかかり、プロセスが完了するまでに元のクラスターのデータが更新されている場合があります。</p><p>データ転送プロセス中に発生した可能性のある更新を同期できるようにするにはさまざまな戦略があり、そのプロセスを開始する前にこれらの問題について検討する必要があります。特に、次の点を考慮する必要があります。</p><ul><li><p>データ転送プロセスの開始以降に更新/追加されたデータを識別する方法は何ですか (例: データ内の「last_update_time」フィールド)?</p></li><li><p>最後のデータを転送するにはどのような方法を使用できますか?</p></li><li><p>記録が重複するリスクはありますか?通常は、使用している方法によって再インデックス中にドキュメント ID が既知の値に設定されない限り、存在します。</p></li></ul><p>更新の同期を有効にするさまざまな方法について以下に説明します。</p><h3>1. 待ち行列システムの使用</h3><p>一部の取り込み/更新システムでは、過去 x 日間に受信したデータの変更を「再生」できるキューを使用します。これにより、実行された変更を同期する手段が提供される場合があります。 </p><h3>2. リモートから再インデックス</h3><p>「last_update_time」が x 日前を超えるすべてのアイテムに対して、再インデックス処理を繰り返します。これを行うには、再インデックス リクエストに「クエリ」パラメータを追加します。</p><h3>3. ログスタッシュ</h3><p>Logstash 入力では、「last_update_time」が x 日前を超えるすべての項目をフィルターするクエリを追加できます。ただし、document_id を設定していない限り、このプロセスでは非時系列データに重複が発生します。</p><h3>4. スナップショット</h3><p>インデックスの一部だけを復元することはできないため、データ転送プロセスの実行以降に行われた変更を更新するには、上で説明した他のデータ転送方法のいずれか (またはスクリプト) を使用する必要があります。</p><p>ただし、スナップショットの復元は再インデックス/Logstash よりもはるかに高速なプロセスであるため、スナップショットの転送中に更新を短時間一時停止して、問題を完全に回避できる可能性があります。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-migrate-data-versions-clusters</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-migrate-data-versions-clusters</guid>
    <category><![CDATA[基本]]></category>
    <dc:creator><![CDATA[Kofi Bartlett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfc041ebca11476c6/6a16f70560084b31b93c4344/01fde3b1d714f12bf8673140c9f2f940d443de31-1440x823.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>