【发布时间】:2015-09-18 06:13:20
【问题描述】:
我正在尝试在 NEST 中创建一个查询,如下所示:
get * where CityName!='' and 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())));
【问题讨论】:
标签: elasticsearch filter nest