この記事の内容
この記事では、ElasticsearchのScrollを使用して、検索結果を取得する方法を紹介します。
言語はC# .NET Coreで記載しています。
ソースコード
Nugetで、Elasticsearch.Netおよび、Newtonsoft.Jsonを取得する必要があります。
using System; using Elasticsearch.Net; using Newtonsoft.Json.Linq; namespace ElasticsearchTest { class Program { static void Main(string[] args) { //スクロールの保持時間設定 ElasticLowLevelClient client = new Elasticsearch.Net.ElasticLowLevelClient(); SearchRequestParameters param = new SearchRequestParameters(); param.Scroll = TimeSpan.FromMinutes(10); //検索 var response = client.Search("index名を入力", PostData.String("{ \"size\" : 10 }"), param); //検索結果からスクロールIDと、検索結果を取得 string scrollID = String.Empty; string hits = String.Empty; ParseData(response.Body, out scrollID, out hits); //スクロールしつつ、結果を取得 while(true) { //スクロール処理 bool isEmpty = false; response = client.Scroll(PostData.String("{ \"scroll\":\"1m\", \"scroll_id\":\"" + scrollID + "\"}")); ParseData(response.Body, out hits, out isEmpty); //結果がとれなくなったら終了 if(isEmpty) { break; } } } static void ParseData(string input, out string o_scrollID, out string o_hits) { o_scrollID = String.Empty; o_hits = String.Empty; JObject obj = Newtonsoft.Json.JsonConvert.DeserializeObject(input); string scrollID = obj["_scroll_id"].ToString(); Console.WriteLine(scrollID); string hits = obj["hits"]["hits"].ToString(); Console.WriteLine(hits); o_scrollID = scrollID; o_hits = hits; } static void ParseData(string input, out string o_hits, out bool o_isEmpty) { o_hits = String.Empty; o_isEmpty = false; JObject obj = Newtonsoft.Json.JsonConvert.DeserializeObject(input); if(!obj["hits"]["hits"].HasValues) { o_isEmpty = true; return; } string hits = obj["hits"]["hits"].ToString(); Console.WriteLine(hits); o_hits = hits; } } }
コメント