2015-01-05 2 views
5

の制限数は、私は干し草と2台のサーバいる:干し草とElasticsearch:結果

  • Server1に:これはelasticsearchはServer2の
  • をインストールしました:これはelasticsearch、クエリが行われていません私はSからクエリを作成するときのServer1

に私の問題は、ページネーションについてですerver2にServer1に

  • Server2のがクエリへのServer1を行い
  • Server1にはが
  • Server2のは改ページを行いServer2のに戻ってすべての結果を送信

しかし、これは最適ではありません。クエリが10.000オブジェクトを返した場合、クエリは遅くなります。

私はあなたが(にとからサイズ)をクエリ内のいくつかの値をelasticsearchに送信できることを知っているが、これは干し草を使用して可能である場合、私は知らない、私はドキュメントをチェックしましたそれを見つけて何も見つけられなかった。私は10で結果10を受け取るためにヘイスタックにクエリを設定できどのよう

編集

  • 私はSearchQuerySet()[10000:10010]を作る場合にのみ、この10の項目を頼むということは可能ですか?
  • または、すべての項目を尋ねてフィルタリングしますか?

EDIT2

私は干し草ドキュメント上でこれを見つけた:

私がやろうとしているwhattを行うために機能思わ:

Restricts the query by altering either the start, end or both offsets.

それから私は操作を行います。

from haystack.query import SearchQuerySet 

sqs = SearchQuerySet() 
sqs.query.set_limits(low=0, high=4) 
sqs.filter(content='anything') 

私がなぜ機能していないset_limitライン

  • を追加したことがないように、結果は、完全なリストでありますか?

答えて

3

ダイガモORMとはちょっと違います。クエリーセットを制限した後、制限付きの結果を得るためにget_results()を呼び出す必要があります。 Elasticの複数のリクエストを避けるため、これは実際にはスマートです。

例:

# Assume you have 800 records. 
sqs = SearchQuerySet() 
sqs.query.set_limits(low=0, high=4) 
len(sqs) # Will return 800 records 
len(sqs.get_results()) # Will return first 4 records. 

ことができますことを願っています。

+0

私はこれを試してみる必要があります。私はこのコードを多く試していましたが、それを達成するための情報は見つかりませんでした。ありがとう!! – AlvaroAV

+0

このエラーが発生しました - 'AttributeError: 'SearchQuerySet'オブジェクトに 'get_results'属性がありません – garg10may

+0

最後の行は' len(sqs.query.get_results()) ' – garg10may

-1

フィルタリングされたレコードにこれらのオフセットを追加する場合は、SearchQuerySetを作成するときにフィルタ条件を追加するだけで、Yigitの回答に追加できます。

制限が設定されたら、設定を変更して再度変更することはできません。再度SearchQuerySet()を作成するか、制限をクリアする方法があります。

results = SearchQuerySet().filter(content="keyword") 
#we have a filtered resultSet now let's find specific records 
results.query.set_limits(0,4) 
return results.query.get_results() 
関連する問題