elasticsearch - 嵌套 Elasticsearch 中的空字段过滤器

标签 elasticsearch filter nest

我正在尝试在 NEST 中创建一个查询,如下所示:

获取 * 其中 CityName!='' 和 StreetName!=''

使用现有的和缺失的过滤器没有帮助,因为字段不为空。我还尝试将 queryString 与通配符 (*) 一起使用,但我在结果中得到了所有文档。我也试过这样的脚本过滤器:

qq.Filtered(ft => ft.Filter(f => f.Script(s => s.Script("doc['cityName'].value.length() > 0"))));

同样无效。 这些字段使用标准分词器进行索引,也使用 ICU 折叠。任何解决方案?

更新 !!!!

我设法通过使用 Regexp 过滤器来完成这些工作。 所以它是这样的:

 QueryContainer notNullQuery = null;

                notNullQuery &= qq.Filtered(ft => ft.Filter(f => f.Regexp(r => r.OnField(ff => ff.StdCityName).Value("[a-z0-9]+[\\s]?"))));
                notNullQuery &= qq.Filtered(ft => ft.Filter(f => f.Regexp(r => r.OnField(ff => ff.StdStreetCode).Value("[0-9]+"))));
                notNullQuery &= qq.Filtered(ft => ft.Filter(f => f.Regexp(r => r.OnField(ff => ff.StdStreetPostCode).Value("[a-z0-9]+[\\s]?"))));
                notNullQuery &= qq.Filtered(ft => ft.Filter(f => f.Regexp(r => r.OnField(ff => ff.LastName1).Value("[a-z0-9]+[\\s]?"))));
                notNullQuery &= qq.Filtered(ft => ft.Filter(f => f.Regexp(r => r.OnField(ff => ff.FirstName1).Value("[a-z0-9]+[\\s]?"))));
                notNullQuery &= qq.Filtered(ft => ft.Filter(f => f.Regexp(r => r.OnField(ff => ff.SourceDisplayPhone).Value("[0-9]+"))));

                return notNullQuery;

后续更新: 对于 NEST 5.x 索引字段作为关键字,然后对术语进行查询搜索。不要忘记输入 Verbatim() 否则查询将不会发送到服务器。

qq.Bool(b => b.MustNot(mn => mn.Term(t => t.Field(f => f.Email).Value("").Verbatim())));

最佳答案

默认情况下,NEST 使用称为无条件查询的功能来重写查询,而无需编写大量 if 语句来构建查询/过滤器。参见 http://nest.azurewebsites.net/nest/writing-queries.html

如果你想关闭它,你可以在图表中的任何时候调用 .Verbatim(bool verbatim = true) 这个标志被传递给 child ,并将导致他们被写入结果查询/过滤器,即使它们是无条件的。

类似地设置 .Strict(bool strict = true) 将在查询是无条件但绝不允许的情况下抛出异常。

关于elasticsearch - 嵌套 Elasticsearch 中的空字段过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31155371/

相关文章:

elasticsearch - ElasticSearch.Net无法识别ElasticSearch返回的时间戳

Spring Security 自定义身份验证过滤器和授权

php - 单击提交前 undefined variable

c# - 如何使用ElasticSearch NEST获取其列表包含某些参数的对象?

elasticsearch - 通过HTTPS的Filebeat

elasticsearch - 7.x版本中的Elasticsearch日期解析错误

grails - 在 Grails 2 Web 应用程序过滤器中定义多个不同的 URI

c# - 用于检索所有记录的 Elasticsearch 搜索查询 NEST

elasticsearch - ElasticSearch Nest Client初始化结果var

elasticsearch - ElasticsearchIllegalArgumentException:插件名称非法