use*_*295 4 filter elasticsearch nest
这可能是一个愚蠢的问题,但如何使用Nest过滤ElasticSearch中的空字符串.具体来说,如何重新创建以下结果:
curl http://localhost:9200/test/event/_search
{
"filter" : { "term" : { "target" : "" }}
}
Run Code Online (Sandbox Code Playgroud)
我试过了:
(f => f
.Term("target", "")
);
Run Code Online (Sandbox Code Playgroud)
根据ElasticSearch和Nest过滤不起作用被视为无条件查询并返回所有内容,而添加.Strict()会抛出DslException:
(f => f
.Strict().Term("target", "")
);
Run Code Online (Sandbox Code Playgroud)
我也试过.Missing()和.Exists()无济于事.
我的_mapping的相关部分供参考:
{
"event": {
"dynamic": "false",
"properties": {
target": {
"type": "string",
"index": "not_analyzed",
"store": true,
"omit_norms": true,
"index_options": "docs"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
任何指针都将非常感激.
正如关于NEST和编写查询的文档所提到的那样,Strict()如果您的查询的一部分证明是conditionless,那么您可以切换模式以触发异常,但如果那就是您真正想要的那样,那么您就会被发现所困扰.
我刚刚提交了一个.Verbatim()完全相同的构造,.Strict()但不是抛出异常,而是按原样查询并按指定渲染它.
(f => f
.Verbatim()
.Term("target", "")
);
Run Code Online (Sandbox Code Playgroud)
因此应禁用conditionless查询重写并按指定的字面插入查询.
这将使它成为NEST的下一个版本(因此在当前版本的0.12.0.0之后)