のクエリ・ボディの設定 Elasticsearch

複数の検索条件を組み合わせる必要がある複雑なクエリには、クエリボディを使用します。 クエリー句は、文書が検索にマッチするかどうかを判断し、より正確な結果を返すのに役立つ。

Elasticsearch との統合ではキーワード検索を使用しますが、クエリボディをエージェントの高度な Elasticsearch 設定として構成することで、以下のような、より高度な検索テクニックを有効にすることができます:

  • ELSERによる意味検索。
  • k-nearest neighbor ( kNN ) 密なベクトル探索。
  • 入れ子になった文書を検索する入れ子クエリ。
  • ハイブリッド検索
  • セマンティック・テキスト・フィールドで検索する。

ELSERによる意味検索

ELSERを使用したセマンティック検索では、ユーザーのクエリの背後にあるコンテキストと意図を理解することで、検索の精度と関連性を高めることができます。 詳細については、を ELSERによる意味検索 外部ページへのリダイレクト用アイコン。 参照してください Elasticsearch ドキュメント

次のコード・スニペットは、ELSERを使ったセマンティック検索の例です。 この例では、他のクエリのブール値の組み合わせに一致するドキュメントをマッチングするために を使用 ブール式 外部ページへのリダイレクト用アイコン。 しています。

{
  "query": {
    "bool": {
      "should": [
        {
          "text_expansion": {
            "ml.tokens": {
              "model_id": ".elser_model_2_linux-x86_64",
              "model_text": "$QUERY"
            }
          }
        }
      ],
      "filter": "$FILTER"
    }
  }
}

ここで:

  • ml.tokens

    ELSERトークンを格納するフィールドを指す。 インデックスに別のフィールドを使用する場合は、更新する必要があるかもしれません。 ELSERトークンが利用できない場合は、生のテキストを含むフィールドを使用することもできますが、検索の質が低下する可能性があります。

  • .elser_model_2_linux-x86-64

    ELSER v2 の最適化されたバージョンのモデル ID です。 Elasticsearch のデプロイメントで利用可能な場合に使用します。 それ以外の場合は、通常の ELSER v2 モデルには .elser_model_2 を、ELSER v1 には .elser_model_1 を使用する。

  • $QUERY

    ユーザークエリにアクセスするための変数である。 ユーザーのクエリがクエリ・ボディに確実に渡されるようにすることができる。

  • $FILTER

    これは、の高度な設定で構成するカスタムフィルター Elasticsearch にアクセスするための変数です。 カスタムフィルターがクエリ本体で使用されていることを確認できます。

ELSERでネストされたクエリを使ってネストされたドキュメントを検索する

Wrapsは、インデックス Elasticsearch にネストされたドキュメントが含まれる場合に、その ネストされたクエリ 外部ページへのリダイレクト用アイコン。 インデックス内のネストされたフィールドを検索するためのクエリをさらにラップします。 マッチした場合、クエリはルートの親ドキュメントと、マッチしたネストしたドキュメントを返します。 検索結果にフィルタを適用する場合、親文書または入れ子文書のいずれかをフィルタリングするように選択できます。

外部文書のクエリ

次のコード・スニペットは、 Elasticsearch インデックス内の外部文書をクエリーする例を示している。
この例では、外側のドキュメントが、 ネストされたドキュメントを含むメイン・ドキュメントです。 passages nested クエリは、 passages ネストされた文書内を検索する。
ネストされたドキュメント内でマッチが見つかった場合、クエリはマッチしたネストされたドキュメントとともにアウタードキュメントを返す。

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "passages",
            "query": {
              "text_expansion": {
                "passages.sparse.tokens": {
                  "model_id": ".elser_model_2_linux-x86_64",
                  "model_text": "$QUERY"
                  }
              }
            },
            "inner_hits": {"_source": {"excludes": ["passages.sparse"]}}
          }
        }
      ],
      "filter": "$FILTER"
    }
  },
  "_source": false
}

内部ドキュメントのクエリ

次のコード・スニペットは、ネストされたドキュメント内の内部ドキュメントをクエリーする例を示しています。
この例では、ネストされたドキュメント内の展開されたテキストを検索し、フィルタを適用し、ソースから特定のフィールドを除いて、一致するネストされたドキュメントを持つ親ドキュメントを返します。

{
  "query": {
    "nested": {
      "path": "passages",
      "query": {
        "bool": {
          "should": [
            {
              "text_expansion": {
                "passages.sparse.tokens": {
                  "model_id": ".elser_model_2_linux-x86_64",
                  "model_text": "$QUERY"
                }
              }
            }
          ],
          "filter": "$FILTER"
        }
      },
      "inner_hits": {"_source": {"excludes": ["passages.sparse"]}}
    }
  },
  "_source": false
}

ここで:

  • passages

    親文書の中に内部文書を格納する入れ子フィールドである。 インデックスで別のネストされたフィールドを使用する場合は、更新する必要があるかもしれません。

  • passages.sparse.tokens

    内部文書のELSERトークンまたは生テキストを格納するフィールドを指す。 インデックスで別のネストされたフィールドを使用する場合は、更新する必要があるかもしれません。 ELSERトークンが利用できない場合は、生のテキストを含むフィールドを使用することもできますが、検索の質が低下する可能性があります。

  • "inner_hits": {"_source": {"excludes": ["passages.sparse"]}}

    検索結果の内部文書からELSERトークンを除外する。

  • "_source": false

    検索結果の中の内側の文書だけが使用されるため、検索結果のトップレベルのフィールドはすべて除外される。

  • $QUERY

    ユーザークエリにアクセスするための変数である。 ユーザーのクエリがクエリ・ボディに確実に渡されるようにすることができる。

  • $FILTER

    これは、の高度な設定で構成するカスタムフィルター Elasticsearch にアクセスするための変数です。 カスタムフィルターがクエリ本体で使用されていることを確認できます。
    外側のドキュメントに適用した場合、フィルターで使用できるのは外側のフィールドのみです。 内部文書に適用された場合、内部フィールドのみがフィルターで使用可能になります。

ネストされたクエリーを使ってセマンティック・テキスト・フィールドを検索する

セマンティック・テキスト・フィールドでネストされたドキュメントをクエリするには、以下の構造を使用してください。 この構造により、 Elasticsearch との統合で検索が適切に機能する。

{
  "query": {
    "nested": {
      "path": "semtext.inference.chunks",
      "query": {
        "sparse_vector": {
          "field": "semtext.inference.chunks.embeddings",
          "inference_id": ".elser_model_2_linux-x86_64",
          "query": "$QUERY"
        }
      },
      "inner_hits": {"_source": {"excludes": ["semtext.inference.chunks.embeddings"]}}
    }
  },
  "_source": false
}

ここで:

  • semtext

    セマンティック・フィールドの名前である。 セマンティックフィールドの名前が違う場合は、更新する必要があるかもしれません。 詳細については、を セマンティックテキストフィールドタイプ 外部ページへのリダイレクト用アイコン。 参照してください Elasticsearch ドキュメント

  • semtext.inference.chunks

    チャンクされたテキストと埋め込みを保存するフィールドを指す。

  • sparse_vector

    これはクエリーのタイプを指定するもので、この場合はsparse_vectorクエリーである。 これは、 text_expansion クエリと似ているが、新しいタイプのクエリである。

  • semtext.inference.chunks.embeddings

    チャンクされたテキストの埋め込みを格納するフィールドを指す。