使用ElasticSearch/Nest过滤空字符串

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)

任何指针都将非常感激.

Mar*_*man 6

正如关于NEST和编写查询文档所提到的那样,Strict()如果您的查询的一部分证明是conditionless,那么您可以切换模式以触发异常,但如果那就是您真正想要的那样,那么您就会被发现所困扰.

我刚刚提交了一个.Verbatim()完全相同的构造,.Strict()但不是抛出异常,而是按原样查询并按指定渲染它.

(f => f
    .Verbatim()
    .Term("target", "")
);
Run Code Online (Sandbox Code Playgroud)

因此应禁用conditionless查询重写并按指定的字面插入查询.

这将使它成为NEST的下一个版本(因此在当前版本的0.12.0.0之后)