Elasticsearchクエリの本文検索をリクエストする

1.基本的なクエリ構文

クエリ例

GET /users/_search?q=21&from=0&size=2&sort=age:desc&search_type=dfs_query_then_fetch&request_cache=true&terminate_after=1&timeout=10s
フィールド 意味
タイムアウト 検索タイムアウト、指定された時間値内に実行される検索要求を制限し、有効期限が切れる前にその時点までに累積されたヒットがベイルで解放されます。デフォルトはタイムアウトなしです。
から オフセットから一致を取得します。デフォルトは0です。
サイズ 返されたクリック数。デフォルトは10です。一部の一致を取得したくないが、一致や集計の数のみに焦点を当てる場合は、この値を0に設定すると、パフォーマンスが向上します。
search_type 実行する検索操作のタイプ。dfs_query_then_fetchまたはquery_then_fetchにすることができます。デフォルトはquery_then_fetchです。
request_cache サイズ値が0のリクエスト、つまり要約と提案の検索結果のキャッシュを有効または無効にするには、trueまたはfalseに設定します(最も高い一致は返されません)。
終了後 シャードごとに収集されるドキュメントの最大数。この数に達すると、クエリの実行は早期に終了します。設定されている場合、応答には、クエリの実行が実際に終了したかどうかを示すブールフィールドterminate_earlyが含まれます。デフォルトは「terminate_afterなし」です。

2、search_type分類

検索タイプに応じて、次の4つのタイプに分類できます。

  • QUERY_THEN_FETCH
  • QUERY_AND_FEATCH
  • DFS_QUERY_THEN_FEATCH
  • DFS_QUERY_AND_FEATCH

2.1クエリとフェッチ(新しいバージョンではサポートされていません)

  クエリ要求がインデックスのすべてのシャードに送信され、各シャードが返されると、ドキュメントと計算されたランキング情報が一緒に返されます。

  • 利点:この検索方法は最速です。他のいくつかの検索方法と比較すると、このクエリ方法はフラグメント化とクエリを1回だけ行う必要があります。
  • 短所:返されるデータの量が不正確で、返される可能性があり(N *シャードの数)、データのランク付けが正確ではありません。同時に、各シャードによって返される結果の合計が、ユーザーが必要とするサイズのn倍になる場合があります。

2.2クエリしてからフェッチ(デフォルトの検索方法)

  最初のステップは、すべてのシャードにリクエストを送信することです。各シャードは、ドキュメントID(ドキュメントを含まない)とランキング関連情報(ドキュメントの対応するスコア)のみを返し、各シャードから返されたドキュメントのスコアに従って再起動します。並べ替えとランク付けを行い、最大サイズのドキュメントを取得します。
  2番目のステップは、ドキュメントIDに従って、関連するシャードからドキュメントを取得することです。この方法で返されるドキュメントの数は、ユーザーが要求したサイズと同じです。

  • 利点:返されるデータの量は正確です。
  • 短所:平均的なパフォーマンスと不正確なデータランキング。

2.3 DFSクエリおよびフェッチ(新しいバージョンではサポートされていません)

  この方法には、最初の方法よりも1つ多いDFSステップがあります。このステップを使用すると、検索のスコアリングとランク付けをより正確に制御できます。つまり、クエリを実行する前に、まずすべてのシャードにリクエストを送信し、すべてのシャードの単語頻度やドキュメント頻度などのすべてのスコアリング基準を1つにまとめてから、次の操作を実行します。

  • 利点:正確なデータランキング
  • 短所:平均的なパフォーマンス。返されるデータの量が不正確であるため、(N *シャードの数)データが返される場合があります

2.4 DFSクエリをフェッチしてからフェッチ(サポート)

  クエリを実行する前に、まずすべてのシャードにリクエストを送信し、すべてのシャードの単語の頻度やドキュメントの頻度など、すべてのスコアリング基準を1つにまとめてから、次の操作を実行します。

  • 利点:返されるデータの量が正確であり、データのランク付けが正確です
  • 短所:パフォーマンスが最悪

DFSは、実際のクエリを実行する前に各セグメントの単語頻度とドキュメント頻度を収集し、単語検索を実行すると、各セグメントが検索され、グローバルな単語頻度とドキュメント頻度に従ってランク付けされます。このクエリメソッドでDFS_QUERY_THEN_FETCHを使用すると、検索に3つのフラグメントが必要になる可能性があるため、効率が最も低くなります。ただし、DFS方式を使用すると、検索精度が最も高くなります。

2.5まとめ

  • パフォーマンス:QUERY_AND_FETCHが最高で、DFS_QUERY_THEN_FETCHが最低です。
  • 検索精度:DFSは非DFSよりも正確です。

おすすめ

転載: blog.csdn.net/qq_42979842/article/details/108089403