一尘不染

如何调试Nest查询?

elasticsearch

我是Nest的新手,我很可能不会像我想的那样创建查询。我的问题更多是教一个人钓鱼而不是给我一条鱼。但是,我将以当前问题为例。

我在ElasticSearch中有几个类型的文档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查询:

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子句时,我得到一个结果,但是我不能保证每个人都可以看到它。

如何查看Nest生成并发送给ElasticSearch的JSON?


阅读 317

收藏
2020-06-22

共1个答案

一尘不染

您可以通过以下方式获取搜索请求URL和JSON请求正文的值:

var requestURL = response.RequestInformation.RequestUrl;
var jsonBody = Encoding.UTF8.GetString(response.RequestInformation.Request);

您可以在中找到其他有用的属性RequestInformation进行调试。

2020-06-22