c# - 你如何调试你的 Nest 查询?

标签 c# elasticsearch nest

我是 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/

相关文章:

c# - 托管扩展框架、拦截和动态代理

java - 无法在配置中找到 Bean 方法 'elasticsearchTemplate'

c# - 使用Nest DSL语法用多个术语过滤的ElasticSearch嵌套查询无法按预期工作

elasticsearch - ElasticSearch NEST客户端在Text和TextPhrase之间的区别

c# - 如何通过 NEST c# 将列表索引到 elasticsearch

c# - 如何将 dll 文件永久添加到我的项目中?

c# - 无序列表复选框列表控件

C# 和 Caliburn - RescueAttribute 和协程

elasticsearch - 如何使用Logstash过滤器转换为嵌套对象以供Elasticsearch输出?

c# - 建议查询时间长