gpt4 book ai didi

elasticsearch - 在 C#.Net 中的 DataTable 中获取 Elasticsearch 响应

转载 作者:行者123 更新时间:2023-12-02 22:19:45 25 4
gpt4 key购买 nike

我是 Elasticsearch 2.1.1 的新手,我想问你如何从index获取记录使用 Suggest并将其转换为 DataTable .我已经在我的项目中安装了 Nest NuGet 包和所有内容。

我有这段代码,我想从 Elasticsearch 以 DataTable 格式获取它

curl -X POST 'localhost:9200/music/_suggest?pretty' -d '{
"song-suggest" : {
"text" : "n",
"completion" : {
"field" : "suggest"
}
}
}'

最佳答案

我有一些 code 的 block 它应该满足您的要求。

正如您所说,您是 Elasticsearch 的新手,所以我先告诉你如何初始化连接。

var settings = new ConnectionSettings(new Uri("http://localhost:9200")); 
var clientElasticSearchNet = new ElasticsearchClient(settings);

然后使用
var ElasticSearchNetQuery = new { music = new { "n", completion = new { field = "name_suggest" } } };

ElasticsearchResponse<string> result = clientElasticSearchNet.Suggest<string>("music", ElasticSearchNetQuery);
JObject json = JObject.Parse(result.Response.ToString());
var hitsCount = ((Newtonsoft.Json.Linq.JContainer)(json["music"].First["options"])).Count;
DataTable dtEsReponnse = new DataTable();
for (int i = 0; i < hitsCount; i++)
{
dtEsReponnse = ConvertJSONToDataTable(json["music"].First["options"][i].ToString());
}

我创建了一个返回 Datatable 的函数。
protected DataTable ConvertJSONToDataTable(string jsonString)
{
string[] jsonParts = Regex.Split(jsonString.Replace("[", "").Replace("]", ""), "},{");
List<string> dtColumns = new List<string>();
foreach (string jp in jsonParts)
{
string[] propData = Regex.Split(jp.Replace("{", "").Replace("}", ""), ",");
foreach (string rowData in propData)
{
try
{
int idx = rowData.IndexOf(":");
string n = rowData.Substring(0, idx - 1);
string v = rowData.Substring(idx + 1);
if (!dtColumns.Contains(n))
{
dtColumns.Add(n.Replace("\"", ""));
}
}
catch (Exception ex)
{
throw new Exception(string.Format("Error Column Name : {0}", rowData));
}

}
break;
}
foreach (string c in dtColumns)
{
if (!dt.Columns.Contains(c.ToString().Replace("\r\n", "").Trim())) {
dt.Columns.Add(c.ToString().Replace("\r\n", "").Trim());
}
}
foreach (string jp in jsonParts)
{
string[] propData = Regex.Split(jp.Replace("{", "").Replace("}", ""), ",");
DataRow nr = dt.NewRow();
foreach (string rowData in propData)
{
try
{
int idx = rowData.IndexOf(":");
string n = rowData.Substring(0, idx - 1).Replace("\"", "").Replace("\r\n", "").Trim(); //replaced
string v = rowData.Substring(idx + 1).Replace("\"", "");
nr[n] = v;
}
catch (Exception ex)
{
continue;
}

}
dt.Rows.Add(nr);
}
return dt;
}

您正在寻找此代码吗?

关于elasticsearch - 在 C#.Net 中的 DataTable 中获取 Elasticsearch 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35408481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com