2016-09-08 5 views
0

伸縮性検索でFrom/Sizeの理論を読んだとき。伸縮時の範囲/伸縮性検索でのサイズ

https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-request-from-size.html

問題は、どのように検索の範囲をdetemineするということです。例えば、私は1.000レコードを生成するならば、私は以下のスニペットとしてそれを照会:

{ 
    "from" : 100, "size" : 10, 
    "query" : { 
     "term" : { "user" : "kimchy" } 
    } 
} 

それは1.000にレコード100の範囲で検索してから10の結果を返すことになるということですか?または、自動的に適切な範囲を生成し、10の結果を返しますか? 誰でもこの問題を回避する手助けはできますか?宜しくお願いします。

答えて

1

したがって、elasticsearchは私たちのインデックスを「シャード」と呼ばれる小さな部分に分割します。したがって、5つのシャードと1000のドキュメントを持つインデックスを持つ場合、各シャードには200のドキュメントが割り当てられます。ここで検索クエリを実行すると、elasticsearchはすべてのシャードを検索し、すべてのシャードのスコアの降順でソートされた結果のリストを作成します。

ここで、最初の10個の結果(0、サイズ:10)が必要な場合、elasticsearchは各シャードの上位10個の結果を取得します(つまり、各シャードに10個以上のヒットがあると仮定した場合)それらを再度ソートし、それらの中からトップ10を返し、40の結果の残りを破棄します。

結果が100から110(100、サイズ:10)の場合、elasticsearchは各シャードのトップ110の結果を要求します。合計550件の結果が得られました。これらの550の結果は再びソートされ、トップ110の結果が得られ、残りの440の結果は破棄されます。

これらの110個の結果のうち、番号1-99は破棄され、検索クエリの結果として結果番号100-110が返されます。

+0

答えが「100から110まで(100から10まで)の結果が必要な場合、elasticsearchは各シャードのトップ110の結果を要求します。つまり、合計550の結果に問題があります。 私はelasticsearchがサイズのために上位10の結果を要求すると思います:10あなたは設定しました。そして、全部で50個の結果が全てのシャードから集められました – VanThaoNguyen

+0

それは間違いです。これを見てみましょう:https://www.elastic.co/guide/en/elasticsearch/guide/current/pagination.html – adityasinghraghav

関連する問題