2016-05-06 21 views
2

まず、100%明確な質問タイトルではなくて申し訳ありません。 数行のコードで説明する方が簡単です:クエリキャッシュを無効にするにはどうすればよいですか?

query = {...} 

while True: 
    elastic_response = elastic_client.search(elastic_index, body=query, request_cache=False) 
    if elastic_response["hits"]["total"]) == 0: 
     break 
    else: 
     for doc in elastic_response["hits"]["hits"]: 
      print("delete {}".format(doc["_id"])) 
      elastic_client.delete(index=elastic_index, doc_type=doc["_type"], id=doc["_id"]) 

私は、検索を行い、その後、すべてのドキュメントを削除してから、次の束を得るために、再度検索を行います。
しかし、検索クエリは私に同じ文書を与えます!これにより、削除時に404例外が発生します。それはある種のキャッシュでなければなりませんが、私は何も見つけられません、 "request_cache"は役に立ちません。

P.S.

ここで私はおそらく削除バッチを使用するには、このコードをリファクタリングすることができますが、私は間違っているかを理解したいです私は公式のPythonクライアントを使用しています

+1

すべてのドキュメントを削除した後でsleep()を2秒間追加した場合、正常に機能しますか? –

+1

また、代わりにインデックス全体を削除しないでください。 –

+0

@Andreiスリープはキャッシュのための別の手がかりを助けます。どのキャッシュ? :)私はそれらのいくつかだけすべての文書を削除したくない –

答えて

3

削除した後にsleep()を使用した場合、ドキュメントが消えてしまうのはキャッシュに関するものではありません。それはrefresh_interval and the near real timeness or Elasticsearchについてです。

コードはforのループを去った後に_refreshに電話してください。また、文書を文書単位で削除しないでください。件数に応じて、バッチ単位ですべての文書を削除する_bulk要求を作成してください。

関連する問題