リトリーバー

この機能は技術プレビュー中であり、将来のリリースで変更または削除される可能性があります。Elasticは問題を修正するために取り組みますが、技術プレビューの機能は公式GA機能のサポートSLAの対象ではありません。

リトリーバーは、8.14.0でSearch APIに追加された抽象化です。この抽象化により、単一の_search呼び出し内でマルチステージのリトリーバルパイプラインを構成できます。これにより、複雑な検索を複数のElasticsearch呼び出しを介して構成したり、異なるクエリからの結果を結合するための追加のクライアント側ロジックを実装する必要がなくなり、検索アプリケーションのロジックが簡素化されます。

この文書は、リトリーバー抽象化の一般的な概要を提供します。実装の詳細、特に注目すべき制限については、_search APIドキュメントのリファレンスドキュメントを参照してください。

リトリーバーの種類

リトリーバーはさまざまなタイプがあり、それぞれ異なる検索操作に合わせて調整されています。現在利用可能なリトリーバーは次のとおりです:

  • スタンダードリトリーバー。従来のクエリからトップドキュメントを返します。リトリーバーフレームワークの文脈で従来のクエリを模倣します。これにより、既存の_searchリクエストがサポートされ続けるため、構文を混在させることなく、新しい抽象化に自分のペースで移行できます。
  • kNNリトリーバー。リトリーバーフレームワークの文脈でknn検索からトップドキュメントを返します。
  • RRFリトリーバー。逆順位融合(RRF)アルゴリズムを使用して、複数の第一段階リトリーバーを組み合わせてランク付けします。異なる関連性指標を持つ複数の結果セットを単一の結果セットに統合できます。RRFリトリーバーは複合リトリーバーであり、そのfilter要素はサブリトリーバーに伝播されます。
    サブリトリーバーは、リトリーバーツリーの一部として複合リトリーバーを持つことによって制限される要素を使用できません。RRFリトリーバーの使用方法についての詳細な例と情報については、RRFドキュメントを参照してください。
  • テキスト類似性再ランクリトリーバーセマンティック再ランクに使用されます。最初にElasticsearch推論APIを使用してrerankタスクを作成する必要があります。

リトリーバーが有用な理由

リトリーバーが有用である理由と、通常のクエリとの違いについての概要を示します。

  • 1. 簡素化されたユーザーエクスペリエンス。リトリーバーは、単一のAPI呼び出しで全体のリトリーバルパイプラインを構成できるため、ユーザーエクスペリエンスを簡素化します。これにより、従来のクエリエレメントとの後方互換性が維持され、適切なリトリーバーに自動的に変換されます。
  • 2. 構造化されたリトリーバル。リトリーバーは、検索操作を定義するためのより構造化された方法を提供します。検索を「リトリーバーツリー」と呼ばれる階層構造を使用して記述でき、操作の順序と論理を明確にし、複雑な検索をより理解しやすく、管理しやすくします。
  • 3. 構成可能性と柔軟性。リトリーバーは柔軟な構成を可能にし、パイプラインを構築し、さまざまなリトリーバル戦略をこれらのパイプラインにシームレスに統合できます。リトリーバーは、さまざまなリトリーバル戦略の組み合わせを簡単にテストできます。
  • 4. 複合操作。リトリーバーはサブリトリーバーを持つことができます。これにより、1つのリトリーバーの結果が別のリトリーバーにフィードされる複雑なネストされた検索が可能になり、複数の段階や基準を含む高度なクエリ戦略をサポートします。
  • 5. 第一級の概念としてのリトリーバル。従来のクエリでは、クエリがより大きな検索API呼び出しの一部であるのに対し、リトリーバーは独立したエンティティとして設計されており、組み合わせたり単独で使用したりできます。これにより、検索を構築するためのよりモジュール化された柔軟なアプローチが可能になります。
  • 6. ドキュメントのスコアリングとランク付けに対する強化された制御。リトリーバーは、ドキュメントがどのようにスコアリングされ、フィルタリングされるかについて、より明示的な制御を可能にします。たとえば、最小スコアのしきい値を指定したり、スコアに影響を与えずに複雑なフィルターを適用したり、terminate_afterのようなパラメーターを使用してパフォーマンスの最適化を行ったりできます。
  • 7. 既存のElasticsearch機能との統合。リトリーバーは、既存の_search API構文(queryknnなど)の代わりに使用できますが、ページネーション(search_after)やソートなどとシームレスに統合されるように設計されています。また、すべてのリーフリトリーバーの組み合わせをブールクエリのshould句として扱うことにより、集約操作との互換性も維持します。
  • 8. 関心の明確な分離。複合リトリーバーを使用する場合、クエリエレメントのみが許可され、関心の明確な分離が強制され、過度にネストされたり相互依存したりする構成から生じる複雑さを防ぎます。

以下の例は、リトリーバーを使用することでRRFランク付けのクエリの構成可能性が簡素化される方法を示しています。

Js

  1. GET example-index/_search
  2. {
  3. "retriever": {
  4. "rrf": {
  5. "retrievers": [
  6. {
  7. "standard": {
  8. "query": {
  9. "sparse_vector": {
  10. "field": "vector.tokens",
  11. "inference_id": "my-elser-endpoint",
  12. "query": "What blue shoes are on sale?"
  13. }
  14. }
  15. }
  16. },
  17. {
  18. "standard": {
  19. "query": {
  20. "match": {
  21. "text": "blue shoes sale"
  22. }
  23. }
  24. }
  25. }
  26. ]
  27. }
  28. }
  29. }

この例は、異なるリトリーバル戦略を単一のretrieverパイプラインに組み合わせる方法を示しています。

  1. **例を展開**
  2. #### Js
  3. ``````js
  4. GET example-index/_search
  5. {
  6. "sub_searches":[
  7. {
  8. "query":{
  9. "match":{
  10. "text":"blue shoes sale"
  11. }
  12. }
  13. },
  14. {
  15. "query":{
  16. "sparse_vector": {
  17. "field": "vector.tokens",
  18. "inference_id": "my-elser-endoint",
  19. "query": "What blue shoes are on sale?"
  20. }
  21. }
  22. }
  23. ],
  24. "rank":{
  25. "rrf":{
  26. "rank_window_size":50,
  27. "rank_constant":20
  28. }
  29. }
  30. }
  31. `

用語集

以下は重要な用語です:

  • リトリーバルパイプライン。トップヒットを生成するための全体のリトリーバルとランク付けのロジックを定義します。
  • リトリーバーツリー。リトリーバーが相互作用する方法を定義する階層構造です。
  • 第一段階リトリーバー。初期の候補ドキュメントのセットを返します。
  • 複合リトリーバー。1つ以上のリトリーバーに基づいて構築され、ドキュメントのリトリーバルとランク付けのロジックを強化します。
  • コンビナー。複数のサブリトリーバーからトップヒットをマージする複合リトリーバーです。
  • 再ランカー。ヒットを再順序付けし、ヒットの数を調整する特別な複合リトリーバーで、第一段階と第二段階の再ランカーの区別があります。

リトリーバーの実行

Search Playgroundは、リトリーバー抽象化を使用してElasticsearchクエリを構築します。インデックス内のフィールドとタイプを自動的に検出し、選択に基づいてリトリーバーツリーを構築します。

Playgroundを使用して、さまざまなリトリーバー構成を試し、それが検索結果にどのように影響するかを確認できます。

詳細については、Playgroundドキュメントを参照してください。

APIリファレンス

実装の詳細、特に注目すべき制限については、Search APIドキュメントのリファレンスドキュメントを参照してください。