2017-02-24 4 views
2

Azure Search's pagingを使用すると、結果に重複した文書が存在することがあります。ページングリクエストの例を次に示します。ページング時にAzure Searchから重複した結果が得られるのはなぜですか?

GET /indexes/myindex/docs?search=*$top=15&$skip=15&$orderby=rating desc 

なぜこれが可能ですか?それはどうしたらできますか?ページング時に一貫性の保証はありますか?

答えて

1

基本索引が変更されている場合、ページ付けされた問合せの結果は安定するとは限りません。ページングは​​ページごとに$skipの値を変更するだけですが、各クエリは独立しており、データの現在のビュー(つまり、汎用データベースにあるようなスナップショットやその他の整合性メカニズムはありません)で動作します。

ここでは、重複する可能性の例を示します。 4つの文書をインデックスを前提としています

  1. { "id": "1", "rating": 5 }
  2. { "id": "2", "rating": 3 }
  3. { "id": "3", "rating": 2 }
  4. { "id": "4", "rating": 1 }

は今で注文した、次の2つのページ・サイズの結果を通じてページにしたいと仮定評価。今、あなたは、インデックスに第五文書を挿入

  1. { "id": "1", "rating": 5 }
  2. { "id": "2", "rating": 3 }

$top=2&$skip=0&$orderby=rating desc 

そして、これらの結果を得る:あなたは、最初のページを取得するには、このクエリを実行したいです:

{ "id": "5", "rating": 4 } 

その後まもなく、あなたは結果の2ページ目フェッチするクエリを実行します。

$top=2&$skip=2&$orderby=rating desc 

そして、これらの結果を得る:あなたの「

  1. { "id": "2", "rating": 3 }
  2. { "id": "3", "rating": 2 }

をお知らせドキュメント2を2回取得しました。これは、新しい文書5の評価値が大きいため、文書2の前にソートして最初のページに移動するためです。

これは、Azure Searchを検索エンジンとみなすことが重要な理由の1つです(理由はありません)。汎用のデータベースではありません。

関連する問題