<?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[マッピング - 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[マッピング - 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/blog/category/mappings</link>
    </image>
    <link>https://www.elastic.co/jp/search-labs/blog/category/mappings</link>
    <atom:link href="https://www.elastic.co/jp/search-labs/rss/category/mappings.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[jp]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 21:48:16 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Elasticsearch ES|QLがインデックス化されていないデータへの全文検索を可能に]]></title>
    <description><![CDATA[MATCHとTO_TEXTはインデックスを作成していないデータに全文検索を行います。ES|QLで計算列、マッピングされていないフィールド、フェデレーテッドソースを検索します。]]></description>
    <content:encoded><![CDATA[<p>ES|QL MATCHは、インデックスを作成していないデータに対して全文検索を実行するようになりました。計算された列、マッピングされていないフィールド、その場で組み立てられた文字列、さらにはS3に保存されているフェデレーションデータ。新しいTO_TEXT関数は、任意の文字列を解析可能なテキストとして扱うようにES|QLに指示するため、MATCHはクエリの存続期間中にのみ存在する値をトークン化し、大文字・小文字の正規化や用語の一致を行うことができます。これは、多くのクエリエンジンがインデックスなし文字列に対して提供しているLIKEやRLIKEパターンマッチングを超えた真の解析です。Elastic Cloud Serverlessで現在利用可能で、Elasticsearch 9.5ではテクニカルプレビューとして提供されています。</p><h2>MATCHとTO_TEXTが任意のES|QL式で全文検索を可能にする方法</h2><p>まずは、Elasticsearch 9.4では不可能だったクエリから始めます。このクエリは <a href="https://www.elastic.co/docs/reference/query-languages/esql/commands/eval">EVALコマンド</a>を使用します。</p><p>この例では、要約にはマッピングやアナライザーの設定がありません。また、逆インデックスとも関連付けられていません。このクエリの有効期間中のみ存在しますが、それでも検索可能です。これを機能させるには、2つの追加要素が必要です。</p><p>まず、<a href="https://www.elastic.co/docs/reference/query-languages/esql/functions-operators/search-functions/match">MATCH</a>は、マップされたフィールドだけでなく、すべての式を最初の引数として受け入れるようになりました。これにはEVALで生成されたカラムや、インラインで使われる関数結果も含まれます。また、元のドキュメントから直接読み込む未マッピングフィールドも含まれます。さらに、この新しいユースケースでは、MATCHで通常受け入れられるすべてのデータタイプがサポートされます。</p><p>2つ目の要素は新しい<a href="https://www.elastic.co/docs/reference/query-languages/esql/functions-operators/type-conversion-functions/to_text">TO_TEXT</a>関数であり、テキスト型の出力を生成する最初のES|QL変換関数です。これまで、テキスト列はインデックス付きマッピングフィールドからのみ取得でき、ES|QL式によって生成される文字列はすべてテキストではなくキーワード値でした。MATCHは2つを異なる方法で扱うため、区別が重要です。テキスト値は分析され、キーワード値は正確に比較されます。これは、インデックス付きキーワードフィールドのMATCHクエリが用語クエリに書き換えられる方法を反映しています。TO_TEXT(x) は、ES|QLに対して、<em>「この文字列を全文として扱う」</em>ように指示する方法です。</p><p>これはElasticsearch 9.5のテクニカルプレビューとして提供されるため、いくつかの制限があります。</p><ul><li><p>現在はフィルタリング機能のみを提供しています。式に対するMATCHは、現時点では関連性スコアには影響しません。インデックス付きフィールドに対する一致のみがスコアに影響します。</p></li><li><p>式を照合する際、あいまい検索などのクエリオプションはまだサポートされていません。</p></li><li><p>実行時テキストは標準アナライザーで解析されます。これはまだ設定変更できません。</p></li></ul><p>これらの制約に対処するための取り組みが進められています。</p><h2>ES|QLでLIKEやRLIKEの代わりに全文検索を使うのはなぜですか？</h2><p>ES|QLには、インデックスなしで文字列を検索するLIKE（ワイルドカードパターン）とRLIKE（正規表現）という2つの方法がすでにありました。どちらもどんな文字列式でも動作するので、MATCHが何を追加するのか疑問に思うのは当然です。答えは<a href="https://www.elastic.co/docs/manage-data/data-store/text-analysis">分析</a>です。これは、語幹抽出や同義語などの技術を用いる、より高度な検索方法です。また、ストップワード処理も行います。</p><p>LIKEは文字列を構成する単語を理解せずに行う単純な部分文字列マッチングです。例えば、キツネ（fox）に関するログメッセージを探しているとします。</p><p>これは大文字表記の「Fox spotted near the henhouse（鶏小屋の近くでキツネが目撃された）」とは一致しませんが、キツネとは全く関係のない「Outfoxed by the competition（競争相手に出し抜かれた）」とは一致します。大文字小文字の区別に関しては偽陰性、他の単語の中に埋もれた部分文字列に関しては偽陽性と、どちらの方向にも問題があります。</p><p>正則表現は格の問題を補うことができますが、単語境界の問題はすぐに複雑化してしまいます。例えばこんな感じです。</p><p>これでさえ、正解ではありません。文末に「!」や「?」が続く場合、「fox」を見落としてしまいます。また、タブ、引用符、括弧については何も言及していません。修正を加えるたびにパターンが長くなり、次にクエリを読む人は、それが実際に何をしているのかをリバースエンジニアリングしなければならなくなります。</p><p>MATCHはクエリと値の両方を<a href="https://www.elastic.co/docs/reference/text-analysis/analyzer-reference">アナライザー</a>に通し、テキストを小文字の単語にトークン化して、単語同士を照合するため、問題が解消されます。</p><p>このクエリは、「The quick brown fox」や「FOX spotted near the henhouse」のような値には一致しますが、「Outfoxed by the competition」や「FOXTROT protocol enabled」には一致しません。単語の周囲の句読点に関係なく一致します。もちろん、これはすべて、MATCH(TO_TEXT(message), "brown fox") のような複数語クエリにも、期待どおりに機能します。</p><p>これまでインデックス化やマッピングが行われていなかったデータに対しても自然言語をサポートするため、 <a href="https://www.elastic.co/docs/reference/text-analysis/analysis-lang-analyzer">36個の専用言語アナライザー</a>を利用できるようにするための作業が進められています。</p><h2>インデックス化されていないデータやマッピングされていないデータの全文検索のユースケース</h2><p>上記の例では<a href="https://www.elastic.co/docs/manage-data/data-store/mapping">マッピングされたフィールド</a>から計算された値を検索しました。ES|QL MATCHを式に適用する際のより興味深いユースケースは、これまで全く検索できなかったデータに関するものです。いくつか見ていきましょう。</p><h3>マッピングを追加せずにES|QLでマップされていないフィールドを検索する方法</h3><p>詳細なスタックトレースや生のリクエストペイロードなど、意図的にマッピングからフィールドを除外する場合もあります。デバッグ用のデータブロックを省略することもあります。これらのうちの1つをインデキシングすると、ドキュメントごとにディスクとヒープ容量が消費されます。四半期に1回しかクエリしないようなフィールドのためにインデックスを作成する価値はありません。</p><p>この決定は常に最終的なものでした。なぜなら <a href="https://www.elastic.co/search-labs/blog/esql-unmapped-fields">マッピングされていないフィールド</a> はクエリから完全に見えなかったからです。Elasticsearch 9.5では、SET unmapped_fields="load"を使用して、ES|QLにマッピングされていないフィールドをソースドキュメントからキーワードとして直接ロードさせることができます。次に、それをTO_TEXTで囲むと、全文検索を実行できるようになります。</p><p>ここでは、stack_traceはマッピングされていません。すべての値は元の文書から取得され、その場で分析されます。行ごとにマッチングされています。これが実際の作業であり、<a href="https://www.elastic.co/docs/manage-data/data-store/index-basics">逆インデックス</a>検索ほど高速になることは決してありません。しかし今では、インデックスを作成しなかったそのフィールドも検索不能ではなくなりました。日常的なケースではマッピングを小さく保ちつつ、重要な場面では四半期に一度の質問にも対応できます。</p><h3>キーワードフィールドでの全文検索（再インデックスなし）</h3><p>キーワードフィールドは多くのことを可能にします。正確なマッチング、高速なアグリゲーション、ソート機能を提供するため、多くのフィールドがそのようにマッピングされます。しかし、マッピングはデータが到着した時点で決定されるため、当初の意図とは異なる方法でデータを利用したくなる状況に陥ることがあります。例えば、product_nameがダッシュボードで集約されるためキーワードとしてマッピングされ、1年分の製品データを受け取った後に、誰かがproduct_nameの値内で検索できるようにしたいと考えることもあるでしょう。</p><p>以前の解決策は、マッピングをテキストに変更する（または複数フィールドを追加する）ことと、すべてを再インデックスすることでした。これは時間と費用がかかる場合があり、多くの場合、ユーザーはわざわざその手間をかけたくないことが多いです。新しい答えは、1つの関数呼び出しです。</p><p>TO_TEXTはキーワード値をその場でテキストに変換するため、MATCHはそれらを正確に比較するのではなく、分析します。これにより、マッピングやソースドキュメントの再インデックス作成なしでキーワードフィールドをクエリできます。検索が日常的なクエリになった場合でも、フィールドをテキストとしてインデックスすることが長期的には正しい選択ですが、TO_TEXTを使えば、追加の手間なく今日すぐに結果を得られます。</p><h3>異なるマッピングを持つインデックス間で同じフィールドを探索</h3><p><a href="https://www.elastic.co/docs/reference/query-languages/esql/esql-multi-index">ES|QLは複数のインデックスにまたがることができ</a>、同じフィールドであっても、すべてのインデックスで常に同じ形式である必要はありません。同じフィールドが異なるインデックスで異なる型を持つ場合、ES|QLはそれを共用型として扱い、変換関数によって競合を解決します。今年のインデックステンプレートではメッセージフィールドのタイプがテキストになっているものの、昨年のテンプレートではキーワードだったという例を考えてみましょう。</p><p>クエリ実行時には、テキストインデックス由来の値であろうとキーワードインデックス由来の値であろうと、すべての値が分析されます。古いインデックスのキーワード値は、他のすべてと同様にトークン化され、小文字に変換されるため、「connection reset」は、どのインデックスに存在していても「Connection RESET by peer」を検索します。</p><p>もう一つ興味深いケースは、フィールドが一方のインデックスにのみマップされているものの、もう一方のインデックスにも存在（かつマップされていない）場合です。</p><p>ここで指摘しておくべき微妙なニュアンスがあります。error_detailsがlogs-2026にマッピングされていて、logs-2025にはマッピングされていない場合、Elasticsearchはこのクエリを<a href="https://lucene.apache.org/">Lucene</a>にプッシュできません。フィールドがマッピングされていないインデックスは、マッチを返さないためです。代わりに、プランナーはフィールドが潜在的に未マッピングであることに気づき、行の出所に関わらず、行ごとにMATCH全体を評価します。どのインデックスにフィールドがマッピングされているかを知る必要はありません。クエリがその質問に答えます。</p><h2>ES|QLが逆インデックスなしでクエリ時にテキストを分析する方法</h2><p>ES|QLが式に対してMATCHを計画する場合、クエリ文字列を事前に一度だけ解析して、一連の用語に分解します。各行がどのように評価されるかは、式の型によって異なります。</p><p><strong>式の種類</strong></p><p><strong>処理</strong></p><p><strong>マッチング動作</strong></p><p>テキスト（TO_TEXT経由）</p><p>アナライザーは値を小文字の用語にトークン化</p><p>トークン同士の比較。いずれかのトークンがクエリ用語のいずれかと一致する場合、その行は一致（ORセマンティクス）。</p><p>キーワード、IP、日付、数字</p><p>分析なし。クエリ定数は一度ネイティブ型に変換。</p><p>行ごとの正確な比較</p><p>どちらの経路もLuceneを完全に迂回し、値を行ごとに評価します。非テキストパスは、これらのフィールドタイプに対してLuceneにプッシュダウンされたマッチクエリの動作と完全に一致するため、クエリがインデックスにヒットするかどうかに関わらず、セマンティクスは一貫しています。</p><p>逆インデックス検索は取り込み時に作業を行い、クエリ時に一致しない文書には一切触れません。実行時マッチはクエリ時に、到達するすべての行に対してその分析を行います。一方は既に処理が完了しているため高速であり、もう一方はデータがインデックス化されている必要がないため柔軟性があります。</p><h2>ES|QL全文検索の今後の展望は</h2><p>この記事の内容はすべて、ES|QLの検索機能を、事前にインデックスを作成したデータだけでなく、あらゆるデータに対して動作させるための、より大規模な取り組みの第一弾です。先に挙げた制約事項については積極的に改善に取り組んでおり、ロードマップはさらに次の段階へと進んでいます。</p><ul><li><p><strong>スコアリング。</strong>実行時の一致結果も_scoreに反映されるため、データがインデックス化されていない場合でも、関連性に基づいてソートできます。</p></li><li><p><strong>式に対する</strong><strong>MATCH_PHRASE。</strong>Elastic Cloud Serverlessですでに利用可能で、9.6でElastic Stackに登場します。</p></li><li><p><strong>設定可能なアナライザー。</strong>式に対するMATCHおよびMATCH_PHRASEのアナライザーサポートにより、クエリ実行時に言語アナライザー、ステミング、同義語を利用できるようになります。</p></li><li><p><strong>マッチオプション。</strong>実行時マッチングのためのあいまい度や演算子などのオプション。</p></li><li><p><strong>ベクトル検索。</strong>行ごとに埋め込みを生成し、実行時にdense_vector式に対してk近傍法（kNN）を実行することで、インデックス化されていないデータにもセマンティック検索を適用できるようにします。</p></li></ul><h2>ES|QLの全文検索を今すぐ試す</h2><p>実行時検索を今すぐお試しください。新しいES|QL機能が最初に実装されるElastic Cloud Serverlessでは現在利用可能で、Elasticsearch 9.5ではテクニカルプレビューとして提供されます。まず<a href="https://www.elastic.co/docs/reference/query-languages/esql/functions-operators/search-functions">検索関数</a>の参照から始め、<a href="https://www.elastic.co/docs/reference/query-languages/esql/limitations">ES|QLの制限</a>ページで現在の制限を確認してください。これはテクニカルプレビュー版であり、皆様からのフィードバックをお待ちしています。これまでインデックス登録されていなかったものを検索して、良い意味でも悪い意味でも驚いたことがあれば、<a href="https://www.elastic.co/jp/community">ぜひお聞かせください</a>。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/full-text-search-unindexed-data</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/full-text-search-unindexed-data</guid>
    <category><![CDATA[ES|QL]]></category>
    <category><![CDATA[マッピング]]></category>
    <dc:creator><![CDATA[Kevin Corcoran,Ioana Tagirta]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9a74e633d05585a8/6a730774b8c2e64c3ebe0fd4/image1.jpg" length="0" type="image/jpeg"/>
    <pubDate>Wed, 05 Aug 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearchインデックスのフィールドを表示する方法]]></title>
    <description><![CDATA[_mapping および _search API、サブフィールド、合成 _source、およびランタイム フィールドを使用して Elasticsearch インデックスのフィールドを表示する方法を学習します。]]></description>
    <content:encoded><![CDATA[<p>この記事では、Elasticsearch インデックスのフィールドを表示する方法について説明します。これは、データの構造を理解し、特定のフィールドを識別し、問題をトラブルシューティングするのに役立ちます。以下のトピックを取り上げます。</p><ol><li><p><code>_mapping</code> API を使用してフィールド情報を取得する</p></li><li><p><code>_search</code> API を使用してフィールド値を表示する</p></li><li><p>サブフィールドの表示</p></li><li><p>Synthetic _source</p></li><li><p>ランタイムフィールド</p></li></ol><h2>1. _mapping APIを使用してフィールド情報を取得する</h2><p><code>_mapping</code> API を使用すると、1 つまたは複数のインデックスのマッピング定義を取得できます。これには、フィールド、そのデータ型、およびその他のプロパティに関する情報が含まれます。特定のインデックスのマッピングを取得するには、次のリクエストを使用します。</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 では、返されるフィールドを制御する方法が複数用意されています。主な方法は次の 2 つです。</p><ol><li><p><strong><code>_source</code></strong>: <a href="https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/mapping-source-field"><code>_source</code></a>フィールドには、取り込みパイプラインまたは前処理手順によって行われた変更も含め、インデックスが作成されたとおりの元の JSON ドキュメント本体が含まれます。ソース ドキュメントの特定のフィールドを表示するには、以下に示すようにソース フィルタリングを実装します。</p></li><li><p><strong><code>fields</code></strong>: <a href="https://www.elastic.co/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields"><code>fields</code></a>パラメータを使用すると、インデックス マッピングに基づいて検索を実行するときにドキュメントから特定のフィールドを取得できます。<code>_source</code>とは異なり、 <code>fields</code> <code>_source</code>を参照せずに、保存されたフィールド、ドキュメント値、またはランタイム フィールドから値を返すこともできます。ただし、ドキュメント値や保存された設定のない標準フィールドの場合は、 <code>_source</code>にフォールバックします。これによって、後述するように、パフォーマンスなど多くの利点が得られます。</p></li></ol><h3>_source フィールドの使用</h3><p>デフォルトでは、 <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><p>さらに詳細な制御が必要な場合は、 <code>_source</code>オブジェクトの<code>includes</code>プロパティと<code>excludes </code>プロパティを使用できます。たとえば、次のクエリは、トップレベルの<code>title</code>フィールドと、 <code>author.description</code>を除く<code>author</code>のすべてのサブフィールドを返します。</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "_source": {
     “includes”: [“title”, “author.*],
     “excludes”: [“author.description”]
  }
}<p>この例では、 <code>author.* </code>パターンを使用して、 <code>author </code>オブジェクトのすべての直接サブフィールドを取得します。次に、 <code>author.description </code>明示的に除外して、他の著者フィールドのみが返されるようにします。ソース JSON を読み込んで解析する必要があるため、パフォーマンスは向上しませんが、ネットワーク経由で送信される応答のサイズは小さくなることに注意してください。</p><h3>フィールドパラメータの使用</h3><p><code>fields</code>パラメータを使用して、検索応答で返されるフィールドをフィルタリングできます。<code>_source</code>ではなく<code>fields</code>を使用すると、次のようないくつかの利点があります。</p><ul><li><p><strong>パフォーマンスの向上:</strong> <code>fields </code> 、 <code>_source</code>全体をロードせずに、<a href="https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/mapping-store">保存されたフィールド</a>または<a href="https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/doc-values">ドキュメント値</a>から直接値を返すことができるため、応答のペイロード サイズが小さくなります。</p></li><li><p><strong>フォーマットされた出力:</strong>標準フィールドの場合、 <code> fields</code>値を取得するために<code>_source</code>にフォールバックすることがありますが、インデックス マッピングを参照して、フォーマットされた日付などの出力を適切にフォーマットし、集計や並べ替えに使用されるものと一貫性を保ちます。</p></li><li><p><strong>ランタイム フィールドへのアクセス:</strong> <code>fields</code> 、元の<code>_source</code>には存在しないランタイム フィールドを返す場合があります。</p></li><li><p>さらに詳しい特典については、<a href="https://www.elastic.co/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields#search-fields-param">こちらを</a>ご覧ください。</p></li></ul><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 に設定して、ソース ドキュメントを返さないようにします。これにより、応答のペイロード サイズを大幅に最小化できますが、これが機能するのは、フィールド<code>title</code>と<code>author</code>が<code>keyword </code>フィールド タイプであり、デフォルトで<code>doc_values</code>有効になっている場合のみであることに注意してください。フィールドで<code>doc_values</code>有効になっておらず、 <code>_source</code>が false に設定されている場合、Elasticsearch はそれらを取得する方法がなく、応答でスキップされます。</p><p><code>fields</code>レスポンスでは、値が 1 つしかない場合でも、常に各フィールドの値の配列が返されることに注意してください。これは、Elasticsearch に専用の配列タイプがなく、どのフィールドも複数の値を持つ可能性があるためです。Elasticsearch の配列の詳細については、<a href="http://elastic.co/docs/reference/elasticsearch/mapping-reference/array">ここをクリック</a>してください。</p><h3>フィールドを取得する他の方法</h3><p><code>_source</code>または<code>fields</code>を使用してフィールドを取得する方法が推奨されますが、特定のユースケースでは次のような異なる方法も使用できます。</p><p><strong>ドキュメント値フィールド:</strong> <code>_source</code>完全に回避したい場合は、 <a href="https://www.elastic.co/docs/reference/elasticsearch/rest-apis/retrieve-selected-fields#docvalue-fields"><code>docvalue_fields</code></a> パラメータを使用して検索できます。Doc 値は<code>_source</code>と同じフィールド値を、並べ替えと集計に最適化されたディスク上のデータ構造で保存します。</p><p>これは<code>_source</code>で保存された値とは別であるため、 <code>_source</code>全体をロードせずに特定のフィールドを要求できます。これは、大きなドキュメントをクエリしているが、ドキュメント値をサポートするいくつかの小さなフィールドのみが必要な場合に便利です。<code>docvalue_fields </code>使用するもう 1 つのユース ケースは、以下の例に示すように、 <code>date</code>と<code>numeric</code>フィールドでカスタム フォーマットを使用する場合です。</p><p>これは、 <code>doc_values</code>有効にしたフィールド、または<code>keyword</code> 、 <code>date</code> 、数値型、 <code>boolean</code>など、デフォルトで有効になっているフィールド タイプに対してのみ機能し、 <a href="https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/text"><code>text</code></a>または<a href="https://www.elastic.co/docs/reference/elasticsearch/plugins/mapper-annotated-text-usage"><code>annotated_text</code></a>に対しては機能しないことに注意してください。</p><p>この例では、 <code>docvalue_fields</code>パラメータを使用して、 <code>_source</code>ドキュメント全体をロードせずに<code>title</code> 、 <code>author</code> 、および<code>published</code>フィールドを取得します。</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "docvalue_fields": [
    "title",
    "author",
    {
      "field": "published",
      "format": "epoch_millis"
    }
  ],
  "_source": false
}<p>このクエリを実行すると、Elasticsearch は各ドキュメントの<code>_source </code>を参照するのではなく、ディスク上の列ストアから直接値を取得します。クエリに指定された<code>format</code>パラメータにより、 <code>published</code>フィールドはデフォルトの形式ではなく<code>epoch_millis</code>形式で返されます。</p><p><strong>保存されたフィールド:</strong>特定のフィールドをマッピングに<a href="https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/mapping-store">保存されているもの</a>として明示的にマークした場合は、 <code>stored_fields</code>パラメータを使用してそれらのフィールドをフィルターできます。これは、特定のフィールドのみで簡単な応答が必要な場合や、後で検索するために意図的に保存したフィールドの場合に便利です。これは<code>_source</code>とは別に保存されるため、このメソッドは<code>_source</code>をロードする必要を回避するのにも役立ちます。</p><p>このオプションはデフォルトでオフになっており、通常は推奨されないことに注意することが重要です。代わりにソース フィルタリングを使用して、元のソース ドキュメントの特定のサブセットを返します。</p><p>以下のサンプルクエリでは、 <code>stored_fields</code>パラメータを使用して、インデックス マッピング構成が「 <code>store”: true</code> 」である<code>summary</code>フィールドを取得します。</p>GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "stored_fields": ["summary"]
}<p>このクエリが実行されると、Elasticsearch はこのフィールドが<code>”store”: true</code>でマークされているかどうかを確認し、見つからない場合はフィールド全体をスキップします。</p><h2>3. サブフィールドの表示</h2><p>インデックスにサブフィールドが含まれている場合は、ドット表記を使用して<code>fields</code>パラメータでフィールド パスを指定できます。サブフィールドは<a href="https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/nested">ネストされたフィールド タイプ</a>とは異なることに注意してください。たとえば、 <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>4. 合成_ソース</h2><p><code> _source</code>を使用する機能を維持しながらディスク領域を節約したい場合は、インデックス マッピングで合成<code>_source</code>を使用するオプションがあります。<a href="https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/mapping-source-field#synthetic-source">合成</a><a href="https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/mapping-source-field#synthetic-source"><code>_source</code></a>は、 <code>_source</code>が無効になっている場合でも、Elasticsearch が保存されたフィールドやドキュメント値などの既存のデータから<code>_source</code>を再構築できるようにする機能です。これにより、再構築がオンザフライで行われるため、クエリ時の速度が若干低下しますが、多くのストレージ スペースを節約できます。インデックス設定で以下の値を使用してこの機能を有効にします。</p>PUT idx
{
  "settings": {
    "index": {
      "mapping": {
        "source": {
          "mode": "synthetic"
        }
      }
    }
  }
}<p>合成<code>_source </code>を使用する利点としては、 <code>_search</code> API 使用時の完全なドキュメント表示、ソース フィルタリング、 <code>_source</code>が利用可能であると想定されている Kibana などの他の機能やツールとの互換性などが挙げられますが、これらはすべて、完全な<code>_source</code>ドキュメントを保存する必要性を回避しながら実現できます。</p><h2>5. ランタイムフィールド</h2><p><a href="https://www.elastic.co/docs/manage-data/data-store/mapping/runtime-fields">ランタイム フィールドを</a>使用すると、クエリ時またはランタイム ブロックの下のインデックス マッピングでスクリプト フィールドを定義できます。これらのフィールドにはインデックスが付けられないため、ランタイム フィールドを追加してもインデックス サイズは増加しませんが、 <code>_source</code>には表示されません。マッピングで定義されたランタイム フィールドは永続的であり、すべてのクエリで使用できますが、クエリ時に定義されたランタイム フィールドは一時的であり、その検索要求でのみ使用できます。</p><p>ランタイム フィールドを使用する主な利点は、ドキュメントを取り込んだ後にフィールドを追加できるため、マッピングの決定が簡素化されることです。ランタイム フィールドは、文字列の書式設定やスコアの計算など、元のドキュメントには存在しないがスクリプトを使用して生成された値でドキュメントを充実させるのにも最適です。</p><p>また、結果セット内のすべてのドキュメントに対してスクリプトを実行する必要があるため、ランタイム フィールドはパフォーマンスに悪影響を与える可能性があることにも注意してください。<a href="https://www.elastic.co/docs/manage-data/data-store/mapping/retrieve-runtime-field">ランタイム フィールドを取得する</a>には、 <code>_search</code> API の<code>fields</code>パラメータを使用することもできます。</p><h2>まとめ</h2><p>Elasticsearch インデックスのフィールドの表示は、インデックス マッピングまたは<code>_source</code>を使用して単純に値を取得する方法から、 <code>fields</code> 、 <code>docvalue_fields</code> 、またはランタイム フィールドを使用して制御と効率性を高めるより高度な方法まで多岐にわたります。さまざまな方法間のトレードオフを理解することが、検索エクスペリエンスを最適化する鍵となります。ペイロードを最適化したり、ドキュメントを充実させたり、合成<code>_source</code>を使用してストレージを節約したりする場合でも、Elasticsearch は必要なデータを必要な方法で見つけるための複数のツールと機能を提供します。これらの手法は、データの構造を理解し、特定のフィールドを識別し、問題のトラブルシューティングを行うのに役立ちます。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/elasticsearch-index-show-fields</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/elasticsearch-index-show-fields</guid>
    <category><![CDATA[データのインデキシング]]></category>
    <category><![CDATA[マッピング]]></category>
    <dc:creator><![CDATA[JD Armada]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd041e871a8935448/6a17de320b0bedf404dd34ab/23b96aaa1a38b1f4747b4a87695d816f24c0cf70-720x421.jpg" length="0" type="image/jpeg"/>
    <pubDate>Wed, 06 Aug 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearch フィールド タイプへの埋め込みのマッピング: semantic_text、dense_vector、sparse_vector]]></title>
    <description><![CDATA[semantic_text、dense_vector、sparse_vector をどのように、いつ使用するか、またそれらが埋め込み生成とどのように関係するかについて説明します。]]></description>
    <content:encoded><![CDATA[<p>情報検索の関連性と精度を向上させるために埋め込みを使用することは、長年にわたって大幅に増加しています。Elasticsearch などのツールは、密ベクトル、疎ベクトル、セマンティック テキストなどの特殊なフィールド タイプを通じてこのタイプのデータをサポートするように進化してきました。ただし、良好な結果を得るには、利用可能な Elasticsearch フィールド タイプ ( <code>semantic_text</code> 、 <code>dense_vector</code> 、 <code>sparse_vector</code> ) に埋め込みを適切にマッピングする方法を理解することが重要です。</p><p>この記事では、これらのフィールド タイプ、それぞれのフィールド タイプをいつ使用するか、インデックス作成時とクエリ時の両方で埋め込み生成と使用戦略にどのように関連するかについて説明します。</p><h2>密ベクトル型</h2><p>Elasticsearch の<code>dense_vector</code>フィールド タイプは、ほぼすべての次元が関連する、テキスト、画像、音声などのデータの数値表現である密なベクトルを格納するために使用されます。これらのベクトルは、OpenAI、Cohere、Hugging Face などのプラットフォームによって提供される埋め込みモデルを使用して生成され、他のドキュメントと正確な用語を共有していない場合でも、データの全体的な意味をキャプチャするように設計されています。</p><p>Elasticsearch では、使用されるモデルに応じて、密なベクトルは最大 4096 次元を持つことができます。たとえば、all-MiniLM-L6-v2 モデルは 384 次元のベクトルを生成しますが、OpenAI の text-embedding-ada-002 は 1536 次元のベクトルを生成します。</p><p><code>dense_vector</code>フィールドは、事前に生成されたベクトルの使用、カスタム類似度関数の適用、外部モデルとの統合など、より高度な制御が必要な場合に、この種の埋め込みを格納するためのデフォルトのタイプとして一般的に採用されています。</p><h3>dense_vector 型をいつ、なぜ使用するのでしょうか?</h3><p>高密度ベクトルは、文、段落、またはドキュメント全体の間の意味的な類似性を捉えるのに最適です。同じ用語を共有していなくても、テキストの全体的な意味を比較することが目的の場合、非常に効果的です。</p><p>密ベクトル フィールドは、OpenAI、Cohere、Hugging Face などのプラットフォームによって提供されるモデルを使用した外部埋め込み生成パイプラインが既にあり、これらのベクトルを手動で保存およびクエリするだけの場合に最適です。このタイプのフィールドは、埋め込みモデルとの高い互換性と、生成およびクエリの完全な柔軟性を提供し、検索中にベクトルがどのように生成、インデックス付け、使用されるかを制御できます。</p><p>さらに、ランキングロジックを調整する必要がある場合には、k-NN や script_score などのクエリを使用して、さまざまな形式のセマンティック検索をサポートします。これらの可能性により、高密度ベクトルは、RAG (検索拡張生成)、推奨システム、類似性に基づくパーソナライズされた検索などのアプリケーションに最適です。</p><p>最後に、このフィールドでは、 <code>cosineSimilarity</code> 、 <code>dotProduct</code> 、 <code>l2norm</code>などの関数を使用して関連性ロジックをカスタマイズし、ユースケースのニーズに応じてランキングを調整できます。 </p><p>柔軟性、カスタマイズ性、および上記のような高度なユースケースとの互換性を必要とする人にとって、高密度ベクターは依然として最適なオプションです。</p><h3>密ベクター型のクエリを使用するにはどうすればいいですか?</h3><p><strong><code>dense_vector</code></strong>として定義されたフィールドの検索では、k 近傍クエリが使用されます。このクエリは、密なベクトルがクエリ ベクトルに最も近いドキュメントを見つける役割を果たします。以下は、密なベクトル フィールドに k-NN クエリを適用する方法の例です。</p>{
  "knn": {
    "field": "my_dense_vector",
    "k": 10,
    "num_candidates": 50,
    "query_vector": [/* vector generated by model */]
  }
}<p>k-NN クエリに加えて、ドキュメントのスコアリングをカスタマイズする必要がある場合は、script_score クエリを使用して、 <strong>cosineSimilarity、dotProduct、l2norm</strong>などのベクトル比較関数と組み合わせて、より制御された方法で関連性を計算することもできます。例を参照してください:</p>{
"script_score": {
    "query": { "match_all": {} },
    "script": {
      "source": "cosineSimilarity(params.query_vector,
'my_dense_vector') + 1.0",
      "params": {
        "query_vector": [/* vector */]
      }
    }
  }
}<p>さらに詳しく知りたい場合は、 <a href="https://www.elastic.co/jp/search-labs/blog/vector-search-set-up-elasticsearch">「Elasticsearch でベクトル検索を設定する方法」の記事を参照することをお勧めします。</a></p><p></p><h2>スパースベクトル型</h2><p><strong><code>sparse_vector</code></strong>フィールド タイプは、ほとんどの値がゼロで、少数の項のみに重要な重みがある数値表現であるスパース ベクトルを格納するために使用されます。このタイプのベクトルは、SPLADE や ELSER (Elastic Learned Sparse EncodeR) などの用語ベースのモデルで一般的です。</p><h3>スパースベクトル型をいつ、なぜ使用するのでしょうか?</h3><p>スパースベクトルは、意味的インテリジェンスを犠牲にすることなく、語彙的により正確な検索が必要な場合に最適です。テキストをトークン/値のペアとして表現し、関連する重みを持つ最も関連性の高い用語のみを強調表示することで、明確さ、制御性、効率性を実現します。</p><p>このタイプのフィールドは、テキスト内の相対的な重要度に基づいて各トークンに異なる重みを割り当てる ELSER モデルや SPLADE モデルなどの用語に基づいてベクトルを生成する場合に特に役立ちます。</p><p>クエリ内の特定の単語の影響を制御したい場合には、スパースベクター型を使用すると、用語の重みを手動で調整して、結果のランキングを最適化できます。</p><p>主な利点としては、ドキュメントが関連性があると判断された理由を明確に理解できるため検索の透明性が高く、また、すべての次元を保存する密なベクトルとは異なり、ゼロ以外の値を持つトークンのみが保存されるためストレージ効率が高くなる点が挙げられます。</p><p>さらに、スパース ベクトルはハイブリッド検索戦略の理想的な補完であり、稠密ベクトルと組み合わせて語彙の精度と意味の理解を組み合わせることもできます。</p><h3>スパースベクトル型のクエリを使用するにはどうすればいいですか?</h3><p><strong><code>sparse_vector</code></strong>クエリを使用すると、トークン/値形式のクエリ ベクトルに基づいてドキュメントを検索できます。以下のクエリの例を参照してください。</p>{
  "query": {
    "sparse_vector": {
      "field": "field_sparse",
      "query_vector": {
        "token1": 0.6,
        "token2": 0.2,
        "token3": 0.9
      }
    }
  }
}<p>トレーニング済みのモデルを使用する場合は、クエリ テキストをスパース ベクトルに自動的に変換する推論エンドポイントを使用できます。</p>{
  "query": {
    "sparse_vector": {
      "field": "field_sparse",
      "inference_id": "the inference ID to produce the token/weights",
      "query": "search text"
    }
  }
}<p>このトピックをさらに詳しく調べるには、 <a href="https://www.elastic.co/jp/search-labs/blog/sparse-vector-embedding">「トレーニング済み ML モデルによるスパース ベクトル埋め込みの理解」</a>を読むことをお勧めします。</p><h2>セマンティックテキストタイプ</h2><p><strong><code>semantic_text</code></strong>フィールド タイプは、Elasticsearch でセマンティック検索を使用する最もシンプルで簡単な方法です。推論エンドポイントを通じて、インデックス作成時とクエリ時の両方で埋め込み生成を自動的に処理します。つまり、ベクトルを手動で生成したり保存したりする手間がかかりません。</p><h3>セマンティックテキストはいつ、なぜ使用するのでしょうか?</h3><p><code>semantic_text</code>フィールドは、最小限の技術的労力で、ベクトルを手動で処理することなく開始したい場合に最適です。このフィールドは、埋め込み生成やベクトル検索マッピングなどの手順を自動化し、セットアップをより速く便利にします。</p><p><strong>シンプルさと抽象化</strong>を重視する場合は、<strong>マッピング、埋め込み生成、および取り込みパイプラインを手動で構成する複雑さが排除される</strong>ため、 <code>semantic_text</code>使用を検討する必要があります。推論モデルを選択するだけで、残りの作業は Elasticsearch が処理します。</p><p>主な利点としては、インデックス作成とクエリの両方で実行される<strong>自動埋め込み生成と</strong>、選択した推論モデルをサポートするように事前構成された、<strong>すぐに使用できるマッピング</strong>が挙げられます。</p><p>さらに、このフィールドは<strong>長いテキストの自動分割 (テキスト チャンク) をネイティブにサポート</strong>しており、大きなテキストをそれぞれ独自の埋め込みを持つ小さな段落に分割できるため、検索の精度が向上します。これにより、特にセマンティック検索の基礎となるエンジニアリングを扱うことなく価値を迅速に提供したいチームにとって、生産性が大幅に向上します。</p><p>ただし、 <code>semantic_text</code>スピードとシンプルさを提供しますが、このアプローチにはいくつかの制限があります。Elasticsearch の推論エンドポイントとして利用できる限り、市場標準モデルの使用が可能になります。ただし、 <code>dense_vector</code>フィールドの場合のように、<strong>外部で生成された埋め込みはサポートされません</strong>。</p><p>ベクトルの生成方法をより細かく制御する必要がある場合、独自の埋め込みを使用する場合、または高度な戦略のために複数のフィールドを組み合わせる必要がある場合は、 <code>dense_vector</code>フィールドと<code>sparse_vector</code>フィールドによって、よりカスタマイズされたシナリオやドメイン固有のシナリオに必要な柔軟性が得られます。</p><h3>セマンティックテキストタイプのクエリの使用方法</h3><p><strong><code>semantic_text</code></strong>より前は、埋め込みの種類 (密または疎) に応じて異なるクエリを使用する必要がありました。スパースフィールドには<code>sparse_vector</code>クエリが使用されましたが、 <code>dense_vector</code>フィールドには KNN クエリが必要でした。</p><p>セマンティック テキスト タイプでは、<a href="https://www.elastic.co/jp/docs/reference/query-languages/query-dsl/query-dsl-semantic-query">セマンティック クエリを使用して検索が実行されます。セマンティック クエリ</a>は、クエリ ベクトルを自動的に生成し、それをインデックス付けされたドキュメントの埋め込みと比較します。<strong><code>semantic_text</code></strong>タイプでは、クエリを埋め込むための推論エンドポイントを定義できますが、何も指定されていない場合は、インデックス作成時に使用されたのと同じエンドポイントがクエリに適用されます。</p>{
  "query": {
    "semantic": {
      "field": "semantic_text_field",
      "query": "search text"
    }
  }
}<p>詳細については、 <a href="https://www.elastic.co/jp/search-labs/blog/semantic-search-simplified-semantic-text">「Elasticsearch の新しい semantic_text マッピング: セマンティック検索の簡素化」という</a>記事を読むことをお勧めします。</p><h2>まとめ</h2><p>Elasticsearch で埋め込みをマッピングする方法を選択するときは、ベクトルを生成する方法とベクトルに対して必要な制御レベルを理解することが重要です。シンプルさを求める場合、セマンティック テキスト フィールドを使用すると、自動かつスケーラブルなセマンティック検索が可能になり、多くの初期使用ケースに最適です。より高度な制御、微調整されたパフォーマンス、またはカスタム モデルとの統合が必要な場合は、密ベクトル フィールドと疎ベクトル フィールドが必要な柔軟性を提供します。</p><p>理想的なフィールド タイプは、ユース ケース、利用可能なインフラストラクチャ、機械学習スタックの成熟度によって異なります。最も重要なのは、Elastic が最新の、適応性に優れた検索システムを構築するためのツールを提供していることです。</p><h2>参照資料</h2><ul><li><p><a href="https://www.elastic.co/jp/guide/en/elasticsearch/reference/current/semantic-text.html">セマンティックテキストフィールドタイプ</a></p></li><li><p><a href="https://www.elastic.co/jp/guide/en/elasticsearch/reference/current/sparse-vector.html">スパースベクトル場型</a></p></li><li><p><a href="https://www.elastic.co/jp/guide/en/elasticsearch/reference/current/dense-vector.html">密ベクトル場型</a></p></li><li><p><a href="https://www.elastic.co/jp/guide/en/elasticsearch/reference/current/query-dsl-semantic-query.html">セマンティッククエリ</a></p></li><li><p><a href="https://www.elastic.co/jp/guide/en/elasticsearch/reference/current/query-dsl-sparse-vector-query.html">スパースベクトルクエリ</a></p></li><li><p><a href="https://www.elastic.co/jp/guide/en/elasticsearch/reference/current/knn-search.html">kNN検索</a></p></li><li><p><a href="https://www.elastic.co/jp/search-labs/blog/semantic-search-simplified-semantic-text">Elasticsearchの新しいsemantic_textマッピング：セマンティック検索の簡素化</a></p></li><li><p><a href="https://www.elastic.co/jp/search-labs/blog/sparse-vector-embedding">学習済み ML モデルによるスパースベクトル埋め込みの理解</a></p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/mapping-embeddings-to-elasticsearch-field-types</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/mapping-embeddings-to-elasticsearch-field-types</guid>
    <category><![CDATA[Vector Database]]></category>
    <category><![CDATA[マッピング]]></category>
    <dc:creator><![CDATA[Andre Luiz]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt72cd3c2601b22886/6a17083b0c4857259901a9dc/f98fdff837db55b466780c0bae672aa6f6c3a966-1200x628.png" length="0" type="image/png"/>
    <pubDate>Tue, 13 May 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>