【发布时间】:2015-03-24 05:53:08
【问题描述】:
我是 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 是如何格式化我的查询的。我的直接目标是找到可发布到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?
【问题讨论】:
-
对于未来的读者,请查看有关日志记录和调试的文档:elastic.co/guide/en/elasticsearch/client/net-api/current/…
标签: c# elasticsearch nest