結果は最大10件までしか表示されないため、エラスティック検索からすべての結果を取得するにはどうすればよいですか。私は次のようなクエリを持っています:
@data = Athlete.search :load => true do
size 15
query do
boolean do
must { string q, {:fields => ["name", "other_names", "nickname", "short_name"], :phrase_slop => 5} }
unless conditions.blank?
conditions.each do |condition|
must { eval(condition) }
end
end
unless excludes.blank?
excludes.each do |exclude|
must_not { eval(exclude) }
end
end
end
end
sort do
by '_score', "desc"
end
end
私は15に制限を設定しましたが、すべてのデータを取得できるように無制限にしたくないので、データが変化し続けるため、制限を設定できないため、すべてのデータを取得したいです。
from
およびsize
パラメーターを使用して、すべてのデータをページングできます。これは、データとインデックスの量によっては非常に遅くなる可能性があります。
http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html
docs から、「from + size
は、デフォルトで10,000に設定されているindex.max_result_window
インデックス設定を超えることはできません」したがって、明らかに非常にアドホックなソリューションは、from
引数を使用する場合、size: 10000
または10,000マイナスfromを渡すことです。 。
以下のMattのコメントに従って、大量のドキュメントがある場合にこれを行う適切な方法は、 scroll api を使用することです。私はこれを正常に使用しましたが、pythonインターフェースのみで使用しました。
スキャン方法を使用します。
curl -XGET 'localhost:9200/_search?search_type=scan&scroll=10m&size=50' -d '
{
"query" : {
"match_all" : {}
}
}
こちら をご覧ください