不使用对象名称嵌套DeleteByQuery

时间:2018-08-06 21:55:09

标签: elasticsearch nest

我想将一个Nest删除请求发送给elasticsearch,而不指定我没有的对象。我见过类似的解决方案:

var response = elasticClient.DeleteByQuery<MyClass>(q => q                
            .Match(m => m.OnField(f => f.Guid).Equals(someObject.Guid))            
            );

发件人:DeleteByQuery using NEST and ElasticSearch

由于我只是从队列中读取纯文本,因此我无权访问与删除请求一起使用的MyClass对象。基本上,我只想删除索引中的所有文档(我知道它的名字),该索引中的变量与例如ordId = 1234相匹配。

    var response = client.DeleteByQuery<string>( q => q
        .Index(indexName)
        .AllTypes()
        .Routing(route)
        .Query(rq => rq
            .Term("orgId", "1234"))
    );

我看到嵌套IElasticClient接口确实具有DeleteByQuery方法,该方法不需要映射对象,但不确定如何实现它。

1 个答案:

答案 0 :(得分:1)

您只需将object指定为T的文档类型DeleteByQuery<T>-在这种情况下,请确保明确提供索引名称和类型名称作为目标。 T用于仅在请求正文中提供强类型访问。例如,

var client = new ElasticClient();

var deleteByQueryResponse = client.DeleteByQuery<object>(d => d
    .Index("index-name")
    .Type("type-name")
    .Query(q => q
        .Term("orgId", "1234")
    )
);

将生成以下查询

POST http://localhost:9200/index-name/type-name/_delete_by_query
{
  "query": {
    "term": {
      "orgId": {
        "value": "1234"
      }
    }
  }
}

首先在URI中将_delete_by_query替换为_search,以确保您将目标文档定位为目标:)