Hi, I had the following code that used to work in NEST 2.4.1 and Elasticsearch 2.3.1 :
var indices = Indices.Index("prefix*");
while (myClient.IndexExists(indices).Exists) {
//code to delete them
}
I recently upgraded to NEST 5.4.0 and Elasticsearch 5.5.0, and the above code stopped working. The "while" condition is always true and the loop becomes infinite. (I've verified all indices are deleted.) Can anyone tell me why and how to check if indices with a specified prefix exist? Thanks a lot!
Sadly, this is a bug in Elasticsearch that is due to be fixed in the next release. It's closely related to changes as part of
and
In the meantime, if you're rolling with the default behaviour of the client to not throw exceptions, simply issuing
client.DeleteIndex("prefix*");
will be sufficient to delete the indices, even if they don't exist.
I initially told @forloop this is a bug but after doing my due diligence here, I'm now going to say that is not and this behavior is intended (so sorry for any confusion this causes you). Instead, to obtain the behavior that you are desiring you should add the parameter allow_no_indices=false
to the REST request. Yes, this is change from previous behavior for HEAD
where this was not necessary but it was a bug that HEAD
and GET
behaved differently. They are aligned now so, and the behavior you're looking for ways always present on GET
with allow_no_indices=false
. I hope that helps clarify the situation for you.
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.