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