Reputation: 11
Can't delete documents from the elastic index.
Tried this code, but it didn't work
string[] stringIds = categoryIds.Select(i => i.ToString()).ToArray();
var client = new ElasticClient(_uri);
await client.DeleteByQueryAsync<NomenclatureIndexModel>(d => d
.Index(CategorySearchIndex)
.Query(q => q
.Terms(ts => ts
.Field(f => f.Id)
.Terms(stringIds))));
What am I doing wrong?
Upvotes: 1
Views: 46
Reputation: 8751
As far as I know. NEST
package has been deprecated. Instead, you could use Elastic.Clients.Elasticsearch
.
In this package you could use "FieldValue.String(x)" to convert string into TermsQueryField
. Below is a working sample using Elastic.Clients.Elasticsearch
:
var settings = new ElasticsearchClientSettings(new Uri("https://10.96.5.5:9200"))
.CertificateFingerprint("xxxxxx")
.Authentication(new BasicAuthentication("xxxx", "xxxx"));
var esClient = new ElasticsearchClient(settings);
var doc1 = new Company
{
user = "tom"
};
var doc2 = new Company
{
user = "jerry"
};
var response = await esClient.IndexAsync(doc1, index: "myindex");
var response2 = await esClient.IndexAsync(doc2, index: "myindex");
Console.WriteLine("update finish");
var termsToDelete = new List<string> { "tom", "jerry" };
var deleteResponse = await esClient.DeleteByQueryAsync<Company>(q => q
.Indices("myindex")
.Query(q => q
.Terms(t => t
.Field("user")
.Term(new Elastic.Clients.Elasticsearch.QueryDsl.TermsQueryField(termsToDelete.Select(x => FieldValue.String(x)).ToArray()))
))
);
var result = deleteResponse;
Console.WriteLine("delete finish");
Upvotes: 0