2016-05-06 5 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

@ Андрея сон помогает, поэтому еще один ключ к кешу. Какой кэш? :) Я не хочу удалять все документы только некоторые из них –

ответ

3

Если после удаления документов документы удаляются, это не относится к кешу. Речь идет о refresh_interval and the near real timeness or Elasticsearch.

Итак, позвоните по телефону _refresh после того, как ваш код покидает цикл for. Кроме того, не удаляйте документ по документам, а создавайте запрос _bulk, где вы удаляете все свои документы партиями в зависимости от того, сколько они.

Смежные вопросы