gpt4 book ai didi

c# - ElasticSearch NEST searchresponse.hits 数据未填充

转载 作者:行者123 更新时间:2023-12-03 02:29:30 27 4
gpt4 key购买 nike

我在 ElasticSearch 中有一个索引。我已经设置了一个 ASP.NET 核心 lambda 无服务器应用程序。我将 IElasticClient 注入(inject)到我的 Controller 中。

我希望我的 Controller 被签名为 public IEnumerable<StreamSummary> Get()以及我认为的 ElasticSearch 查询就像 return searchResponse.Hits.Select(h => h.Source).ToList(); 一样简单但情况并非如此,如下所示。

我用这样的基本内容查询我的索引

var searchResponse = elasticClient.Search<StreamSummary>(s => s
.Index("myindex")
.Query(q => q.MatchAll()
)
);

当我记录我得到多少“点击”时,它是正确的数量( searchResponse.Hits.Count)。

当我设置我的 Controller 返回 IEnumerable<StreamSummary>并使用 searchResponse.Hits.Select(h => h.Source).ToList()该列表是正确的数字,但每个条目都没有值。 DateTime字段都是 Datetime.Min字符串为空,可为空的为 null .它基本上是一个空的/新实例化的类,并且没有像我预期的那样填充/序列化。

当我迭代命中并显示/记录索引、类型和 ID 时,这一切都可以正常工作并完全按照我的预期显示。我遇到的问题是 _source(源属性 NEST)。
foreach (var searchResponseHit in searchResponse.Hits)
{
hits.Add(searchResponseHit.Index);
hits.Add(searchResponseHit.Type);
hits.Add(searchResponseHit.Id); searchResponseHit.Source
searchResponseHit.Source // here is the problem, no populated StreamSummary data}

点击是 List<string> hits = new List<string>();
所以我进一步挖掘了我的 Startup.csDisableDirectStreaming()ConnectionSettings()所以我可以得到请求/响应缓冲的字节流。

然后我执行以下操作:
var requestJson = System.Text.Encoding.UTF8.GetString(searchResponse.ApiCall.RequestBodyInBytes);
var responseJson = System.Text.Encoding.UTF8.GetString(searchResponse.ApiCall.ResponseBodyInBytes);
return searchResponse.ApiCall.HttpMethod.ToString() + searchResponse.ApiCall.Uri + "\n" + requestJson + "\r\n" + responseJson;

这是一个不完整/部分响应,但您可以看到它包含很多转义字符等。(这可能是问题的一部分,一个序列化问题吗??)
\"hits\" : {\n    \"total\" : {\n      \"value\" : 9,\n      \"relation\" : \"eq\"\n    },\n    \"max_score\" : 1.0,\n    \"hits\" : [\n      {\n        \"_index\" : \"accounts\",\n        \"_type\" : \"_doc\",\n        \"_id\" : \"U3P 1 8fb4b770-4e29-4f0d-aec8-1bcd4199005f\",\n        \"_score\" : 1.0,\n        \"_source\" : {\n          \"ProcessingResponse\" : \"Success\",\n          \"ProviderId\" : 6,\n

连接/客户端:
 var uri = new Uri(Configuration["ElasticSearch:Url"]);
var httpConnection = new AwsHttpConnection(new BasicAWSCredentials(Configuration["AWS:AwsAccessKeyId"], Configuration["AWS:AwsSecretAccessKey"]),
RegionEndpoint.GetBySystemName(Configuration["ElasticSearch:Region"]));
var pool = new SingleNodeConnectionPool(uri);
var config = new ConnectionSettings(pool, httpConnection).DefaultIndex(Startup.ElasticSearchIndex)
.DisableDirectStreaming().PrettyJson();
var elasticClient = new ElasticClient(config);
services.AddSingleton<IElasticClient>(elasticClient);

POCO 是:
public class StreamSummary : ResponseSummary
{
public string Type { get; set; }
public int? ProviderId { get; set; }
public string ProviderAccount { get; set; }
public int? ProcessingTime { get; set; }
public DateTime ProcessedTimeUtc { get; set; }
}

其中响应摘要包含几个可以为空的小数(但也有 IList<AnotherClass>)

帮助赞赏。

最佳答案

如果我没记错的话,这就是你所追求的:

searchResponse.Documents

关于c# - ElasticSearch NEST searchresponse.hits 数据未填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60319148/

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