C# 使用Mpdreamz/NEST循环elasticsearch queryresult
Iam使用Mpdreamz/NEST作为.net客户端搜索elasticsearchC# 使用Mpdreamz/NEST循环elasticsearch queryresult,c#,
elasticsearch,nest,C#,
elasticsearch,Nest,Iam使用Mpdreamz/NEST作为.net客户端搜索elasticsearch 我使用result.Hits.Total获取搜索结果的结果计数。但我想知道如何从结果中显示字段的值。查看NEST源代码,您似乎可以执行以下操作: foreach (var item in result.Documents.ToList()) { string msg = "Name: " + item.Name + " | Value: " + item.Text; alert(msg); }
我使用
result.Hits.Total
获取搜索结果的结果计数。但我想知道如何从结果中显示字段的值。查看NEST源代码,您似乎可以执行以下操作:
foreach (var item in result.Documents.ToList())
{
string msg = "Name: " + item.Name + " | Value: " + item.Text;
alert(msg);
}
var result=client.Search(..)
将返回一个类型为IEnumerable
的Documents
属性的QueryResult
。您可以这样循环:
foreach(var d in result.Documents)
{
Console.WriteLine(d.title);
}
此处的大小写问题d.Title
将导致RuntimeBinderException。除非您的elasticsearch字段实际上与您的标题完全匹配`
您还可以映射到POCO的
public class MyResult
{
public string Title { get; set; }
}
var result=client.Search(..)
现在,Documents
是一个IEnumerable
,它将为您提供编译时保证属性存在
除非处理用户输入,否则不应访问.Fields[“field”]
result.Total
也优于result.Hits.Total
谢谢您的快速回复。。我试过了,但我想显示结果中单个字段的值,比如“title”。var result=client.Search(s=>s.Index(“algotest”)….MatchAll());这是我的搜索查询。异常:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法在System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](调用站点,T0 arg0,T1 arg1)的CallSite.Target(闭包,调用站点,对象,字符串)上对空引用执行运行时绑定使用字符串Title=res.Fields[“Title”]时出现此异常;似乎res
对象是null
。你能提供你的应用程序的更多代码吗?在第二个循环中也得到了同样的异常:(我的标题显示代码附在gist中,请检查。还有一件事,搜索结果返回了总共32个点击数,然后res如何变为null!!!是的,它工作:)非常感谢Yannick为你提供的巨大帮助请给出答案