我想将一个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方法,该方法不需要映射对象,但不确定如何实现它。
答案 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
,以确保您将目标文档定位为目标:)