この記事の内容
この記事では、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;
}
}
}


コメント