2014-11-13 3 views
8

Я знаю как delete an entire ElasticSearch index, но как вы очищаете все документы от индекса?ElasticSearch и NEST: Как вы очищаете все документы от индекса?

Мотивация: Я хотел бы иметь метод «ReIndex», который очищает все содержимое индекса, чтобы я мог перезагрузить все документы.

Синтаксис ElasticSearch будет helful. Синтаксис NEST будет еще лучше.

+2

DeleteByQuery теперь осуждается. Кто-нибудь получил последний синтаксис в версиях Nest 2? – LMK

ответ

13

Я искал что-то подобное в гнездо, и я думал, что я бы поставил здесь синтаксис для тех, кто ищет:

var node = new Uri("http://localhost:9200"); 
var settings = new ConnectionSettings(node); 
var client = new ElasticClient(settings); 

client.DeleteByQuery<ElasticsearchProject>(del => del 
    .Query(q => q.QueryString(qs=>qs.Query("*"))) 
); 
4

Вы можете использовать удаление по запросу. Это приведет к удалению всех документов, соответствующих * i.e. all.

curl -XDELETE localhost:9200/<indexname>/_query?q=* 
  • Изменение локального хоста на имя хоста, что узел работает.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

Не забудьте оптимизировать позже.

curl localhost:9200/<indexname>/_optimize 
1

$ curl -XPOST localhost:9200/myindex/_optimize ....

Процесс оптимизации будет очистить все ваше softdeletes сделанного вами на удалении по запросу.

Мы также сталкиваемся с проблемой simillar, когда мы удаляем много документов. Обычно мы перемещаем много документов из одного индекса в другой, поскольку мы поместили данные по дате. Но поскольку ES не поддерживает перенос данных из одного индекса в другой.

Но оптимизация - это дорогостоящая операция, так как она потребляет много IO-запросов. Если вы просто хотите сделать чистку только для удалений, я думаю, вы можете использовать флаг «only_expunge_deletes», чтобы объединить сегменты только с удалением.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-optimize.html

0
**To delete all Records -** 
client.DeleteByQuery<ElasticsearchProject>(del => del 
      .Query(q => q.QueryString(qs=>qs.Query("*")) 
     )); 
**To delete index-** 
client.DeleteIndex(d => d.Index("index_name")); 
Смежные вопросы