我是Nest的新手,我很可能不会像我想的那样创建查询。我的问题更多是教一个人钓鱼而不是给我一条鱼。但是,我将以当前问题为例。
我在ElasticSearch中有几个类型的文档Series。我将在下面不使用属性和公共修饰符来进行存根,只包含与查询有关的信息:
Series
class Series { string Id {get; set;} DateTime StartDate {get; set;} DateTime EndDate {get; set;} HashSet<Role> ReleasableTo {get; set;} }
这些都很好,花花公子。我可以Get()一个Series对象没有问题。我遇到的问题是试图弄清楚Nest如何格式化查询。我的近期目标是要找到最近的Series是释放到Role.Visitor。我像这样设置Nest查询:
Get()
Role.Visitor
ISearchResponse<Series> response = client .Search<Series>(r => r.Filter(f => f.Term<Role>(t=>t.ReleasableTo.First(), Role.Visitor)) .SortDescending(ser => ser.EndDate).Size(1));
在我看来,这应该产生一个查询,以过滤Series,因此它只考虑属于ReleasableTomy 的查询Role.Visitor,并按结束日期进行反向排序,并将结果限制为返回的一个。那正是我想要的。在针对Series的数千条记录中,约90%符合此配置文件。不幸的是,查询返回0个结果。没有错误,只有结果。我不知道的是我是否使用了错误的API,Nest正在生成没有意义的查询结构,还是我对ElasticSearch不够了解。当我删除该Filter子句时,我得到一个结果,但是我不能保证每个人都可以看到它。
ReleasableTo
Filter
如何查看Nest生成并发送给ElasticSearch的JSON?
您可以通过以下方式获取搜索请求URL和JSON请求正文的值:
var requestURL = response.RequestInformation.RequestUrl; var jsonBody = Encoding.UTF8.GetString(response.RequestInformation.Request);
您可以在中找到其他有用的属性RequestInformation进行调试。
RequestInformation