ElasticSearch NEST删除所有文档

本文关键字:文档 删除 NEST ElasticSearch | 更新日期: 2023-09-27 18:04:47

我使用的是ElastciSearch 2.3.0

我试图从ElasticSearch中删除文档,使用。net和NEST进行特定索引。

我只想删除所有的文档,不删除_mapping

DeleteByQueryRequest r = new DeleteByQueryRequest(new IndexName() { Name = indexName });
r.QueryOnQueryString = "*";                            
var response = client.DeleteByQuery(r);

我试图通过使用上面的代码来做到这一点,但它不工作。

请建议上面的代码有什么问题或如何做到这一点。

提前感谢您的帮助

ElasticSearch NEST删除所有文档

不要使用delete by query从elastic 2.0开始就是一个插件,这是有原因的。你可以很容易地得到内存异常。您应该删除整个索引并重新创建映射

static void Main(string[] args)
        {
            ElasticClient db = new ElasticClient(new Uri("http://localhost.fiddler:9200"));
            db.IndexMany(Enumerable.Range(0, 100).Select(i => new Data { Id = i, Name = "Name" + i }), "test_index");
            var mappings = db.GetMapping<Data>();
            var delete = db.DeleteIndex(new DeleteIndexRequest("test_index"));
            var indexMapping = mappings.IndexTypeMappings["test_index"].ToDictionary(k => k.Key, v => (ITypeMapping)v.Value);
            db.CreateIndex(new CreateIndexRequest("test_index")
            {
                Mappings = new Mappings(indexMapping)
            });
            Console.ReadLine();
        }
        class Data 
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }

索引的原始副本

var res = db.LowLevel.IndicesGetMapping<JObject>("test_index"); 
var delete = db.DeleteIndex(new DeleteIndexRequest("test_index"));
var mappings = res.Body["test_index"].ToString(); 
var create = db.LowLevel.IndicesCreate<JObject>("test_index", mappings);

如果您确实需要安装插件Sudo bin/plugin install delete-by-query

成功了。非常感谢。

var res = db.LowLevel.IndicesGetMapping<JObject>("test_index"); 
var delete = db.DeleteIndex(new DeleteIndexRequest("test_index")); 
var mappings = res.Body["test_index"].ToString(); 
var create = db.LowLevel.IndicesCreate<JObject>("test_index", mappings);