Elasticsearch NEST查询近15分钟数据的语句问题排查
你编写的NEST查询存在以下问题
- 语法错误:
_client和SearchAsync之间缺少点号,正确写法是_client.SearchAsync - 语法错误:
Query(q => q.末尾多了多余的点号,会直接导致编译失败 - 语法错误:
GreaterThanOrEqual方法名拼写错误,NEST日期范围查询的对应方法是GreaterThanOrEquals,缺少末尾的s - 逻辑冗余&位置错误:
MatchAll()不应该放在Query外层的链式调用中,且你已经通过Bool过滤定义了查询逻辑,不需要额外加MatchAll,多余配置还可能导致查询逻辑冲突 - 冗余配置:使用Scroll滚动查询时,
From(0)参数会被ES直接忽略,Scroll本身不支持分页偏移参数 - 冗余配置:
Source(src=> src.IncludeAll())属于多余配置,ES查询默认就会返回所有字段,不需要显式声明 - 日期查询注意点:
$"now-{15}m"可以简化为"now-15m",无需多余字符串拼接;另外需要确认你索引中存储的时间字段是UTC时间,否则会因为时区差导致查询范围不符合预期 - 字段校验:
Field(time)中的time变量需要和索引中实际的时间字段名完全匹配(ES字段名大小写敏感),字段名错误会导致过滤条件失效
修正后的代码示例
var response = await _client.SearchAsync<dynamic>(s => s .Index("someproj") .Size(size) .Query(q => q .Bool(b => b .Filter(f => f .DateRange(dr => dr .Field(time) .GreaterThanOrEquals("now-15m") ) ) ) ) .Scroll(scrollTime) );
内容的提问来源于stack exchange,提问作者LukaJajanidze
相关产品推荐
相关产品推荐

