作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的代码在 Nest 6.0
之前工作,用于枚举动态命中结果。但它不再抛出 InvalidCastException
。
代码:
var response = elasticClient.Search<dynamic>(
s => s.Query(q => q.QueryString(m => m.Query(elasticQueryModel.QueryString))
).Source(src => src.Includes(f => f.Fields(fields))).Size(querySize).AllTypes().Index(elasticQueryModel.Index));
var hits = response.Hits;
var rows = new List<Dictionary<string, object>>();
foreach (var hit in hits)
{
var source = (IDictionary<string, Newtonsoft.Json.Linq.JToken>)hit.Source;
var row = new Dictionary<string, object>();
foreach (var keyValuePair in source)
{
row[keyValuePair.Key] = keyValuePair.Value;
}
rows.Add(row);
}
hit.Source 的有效转换是什么,或者此代码块的其他解决方案?
最佳答案
在 NEST 6.x 中,对 Json.NET 的依赖被 IL 合并并在客户端内部化。这样做的原因有很多,包括:
ArrayPool<T>
, Span<T>
等此更改意味着使用 dynamic
作为 Search<T>()
上的通用类型将不再以 Json.NET 的 JObject
形式返回源文档, 但将作为内部类型的实例返回 Nest.Json.Linq.JObject
.
如果您仍想将 Json.NET 与 NEST 结合使用,那么还有 NEST.JsonNetSerializer nuget package这让你可以 plug in your own serialization based on Json.NET. (由于 NEST 6.x 尚未正式发布,文档仍在进行中)。
虽然我认为这里更简单的场景是使用 Dictionary<string, object>
作为 Search<T>()
的通用参数
var response = client.Search<Dictionary<string, object>>(s => s
.Query(q => q
.QueryString(m => m
.Query("username")
)
)
.AllTypes()
);
foreach (var hit in response.Hits)
{
foreach (var keyValuePair in hit.Source)
{
// do something
}
}
关于c# - 使用 NEST 6.0 for Elasticsearch 枚举动态命中结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47919978/
我是一名优秀的程序员,十分优秀!