使用 ElasticSearch/Nest 过滤空字符串

标签 filter elasticsearch nest

这可能是一个愚蠢的问题,但我如何使用 Nest 在 ElasticSearch 中过滤空字符串。具体来说,我如何重新创建以下结果:

curl http://localhost:9200/test/event/_search
{
    "filter" : { "term" : { "target" : "" }}
}

我试过:

(f => f
    .Term("target", "")
);

根据ElasticSearch and Nest filtering does not work被视为无条件查询并返回所有内容,同时添加 .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"
            }
        }
    }
}

如有任何指点,我们将不胜感激。

最佳答案

作为documentation on NEST and writing queries提到你可以切换 Strict() 模式来触发异常,如果你的查询的一部分结果是 conditionless 但如果那是你真正想要的那么你就被卡住了我发现了。

我刚刚提交了一个 .Verbatim() 构造,它的工作方式与 .Strict() 完全相同,但它不会抛出异常,而是按原样获取查询并呈现它按照规定。

(f => f
    .Verbatim()
    .Term("target", "")
);

因此应该禁用conditionless 查询重写并按照指定的字面意义插入查询。

这将在下一个版本的 NEST 中实现(因此在当前版本 0.12.0.0 之后)

关于使用 ElasticSearch/Nest 过滤空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20364963/

相关文章:

python - 使用外键作为参数在 Django 中过滤对象

elasticsearch - 如何根据Elastic中的数据生成N个FlowFiles并设置每个FlowFile的内容?

c# - 如何使用属性表示Nest中的关键字数组

php - 简单的 Ajax 过滤器不返回结果

git - 让 Git 对我的更改视而不见的更好方法

javascript - 如何统计过滤后显示的表格行数?

elasticsearch - Elasticsearch Edge Ngram token 生成器返回的相关项较少

elasticsearch - 在ES 1.4和ES 2.3中使用Analyzer API获取不同的位置值

c# 将类作为参数传递

c# - 如何将Dictionary <object,object>序列化为json