ElasticSearch NEST删除所有文档

时间:2016-08-31 08:28:22

标签: c# elasticsearch nest

我正在使用ElastciSearch 2.3.0

我正在尝试使用.net和NEST删除ElasticSearch中的文档以获取特定索引。

我只想删除所有文件而不是_mapping

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

我尝试使用上面的代码执行此操作,但它无法正常工作。

请告知上述代码的错误或如何解决此问题。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

不要通过查询使用删除它因为弹性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-by-query

答案 1 :(得分:0)

有效。 非常感谢。

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);