我是 Nest 的新手,我很可能不会像我想的那样创建查询。我的问题更像是授人以鱼不如授人以渔。但是,我将以我当前的问题为例。
我在 ElasticSearch 中有几个 Series
类型的文档。我将在没有属性和公共(public)修饰符的情况下将其 stub ,仅包含与查询相关的信息:
class Series
{
string Id {get; set;}
DateTime StartDate {get; set;}
DateTime EndDate {get; set;}
HashSet<Role> ReleasableTo {get; set;}
}
这些都很好,花花公子。我可以 Get()
Series
对象没问题。我遇到的问题是试图弄清楚 Nest 如何格式化我的查询。我的近期目标是找到可发布给 Role.Visitor
的最新 Series
。我这样设置 Nest 查询:
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));
在我看来,这应该生成一个过滤系列的查询,因此它只考虑那些是 ReleasableTo
我的 Role.Visitor
,按结束日期反向排序, 并将结果限制为返回一个。那正是我想要的。在我拥有的数以千计的 Series 记录中,大约 90% 符合此配置文件。不幸的是,查询返回 0 个结果。没有错误,只是没有结果。我不知道的是我是否错误地使用了 API,Nest 是否生成了一个没有意义的查询结构,或者我只是对 ElasticSearch 不够了解。当我删除 Filter
子句时,我得到了一个结果,但我不能保证每个人都可以看到它。
如何查看 Nest 生成并发送到 ElasticSearch 的 JSON?
最佳答案
您可以获取搜索请求 URL 和 JSON 请求正文的值,如下所示:
var requestURL = response.RequestInformation.RequestUrl;
var jsonBody = Encoding.UTF8.GetString(response.RequestInformation.Request);
您可以在 RequestInformation
中找到其他有用的属性以进行调试。
关于c# - 你如何调试你的 Nest 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28139604/