I have few documents in a folder and I want to check if all the documents in this folder are indexed or not. To do so, for each document name in the folder, I would like to
Here is how I solved my problem. Hope this helps. (References https://www.elastic.co/guide/en/elasticsearch/client/net-api/1.x/scroll.html , https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html#scroll-search-context)
List<string> indexedList = new List<string>();
var scanResults = client.Search<ClassName>(s => s
.From(0)
.Size(2000)
.MatchAll()
.Fields(f=>f.Field(fi=>fi.propertyName)) //I used field to get only the value I needed rather than getting the whole document
.SearchType(Elasticsearch.Net.SearchType.Scan)
.Scroll("5m")
);
var results = client.Scroll<ClassName>("10m", scanResults.ScrollId);
while (results.Documents.Any())
{
foreach(var doc in results.Fields)
{
indexedList.Add(doc.Value<string>("propertyName"));
}
results = client.Scroll<ClassName>("10m", results.ScrollId);
}
var response = client.Search<Document>(s => s
.From(fromNum)
.Size(PageSize)
.Query(q => q ....
You can easily perform the following to get all records in index:
var searchResponse = client.Search<T>(s => s
.Index("IndexName")
.Query(q => q.MatchAll()
)
);
var documents = searchResponse.Documents.Select(f => f.fieldName).ToList();