elasticsearch 嵌套DeleteByQuery而不使用对象名,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 嵌套DeleteByQuery而不使用对象名,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 嵌套DeleteByQuery而不使用对象名

elasticsearch 嵌套DeleteByQuery而不使用对象名,elasticsearch,nest,elasticsearch,Nest,我想向elasticsearch发送嵌套删除请求,但不指定我没有的对象。我见过这样的解决方案: var response = elasticClient.DeleteByQuery<MyClass>(q => q .Match(m => m.OnField(f => f.Guid).Equals(someObject.Guid)) ); var response

我想向elasticsearch发送嵌套删除请求,但不指定我没有的对象。我见过这样的解决方案:

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

因为我只是从队列中读取纯文本,所以我没有权限访问MyClass对象以用于删除请求。基本上,我只想删除索引(我知道其名称)中变量匹配的所有文档,例如ORDD=1234。比如:

    var response = client.DeleteByQuery<string>( q => q
        .Index(indexName)
        .AllTypes()
        .Routing(route)
        .Query(rq => rq
            .Term("orgId", "1234"))
    );
var response=client.DeleteByQuery(q=>q
.Index(索引名)
.AllTypes()
.路线(路线)
.Query(rq=>rq
.术语(“orgId”、“1234”))
);

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

您只需将
对象指定为
t
的文档类型
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")
    )
);

首先在URI中将
\u delete\u替换为
\u search
,以确保您的目标是预期的文档:)

太棒了,谢谢您的详细回复。您提到了显式提到索引名和类型名,如果我想针对与字段匹配的所有文档类型,我可以使用.AllTypes()而不是.type(“类型名”)。@CorribView yes您可以:)
POST http://localhost:9200/index-name/type-name/_delete_by_query
{
  "query": {
    "term": {
      "orgId": {
        "value": "1234"
      }
    }
  }
}