栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

&&和||怎么做 在NEST中构建查询?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

&&和||怎么做 在NEST中构建查询?

这实际上是NEST中的错误

NEST如何帮助转换布尔查询的先驱:

NEST允许您使用运算符重载轻松创建详细的布尔查询/过滤器,即:

term && term
将导致:

bool    must        term        term

天真的实现会重写

term && term && term

bool    must        term        bool must     term     term

正如您可以想象的那样,查询变得更加复杂,NEST可以发现这些并将它们结合在一起,从而变得非常笨拙

bool    must         term        term        term

同样

term && term && term && !term
简单地变成:

bool    must         term        term        term    must_not        term

现在,如果在前面的示例中您像这样直接传递booleanquery

bool(must=term, term, term) && !term

它仍然会生成相同的查询。当NEST

should
看到播放中的布尔描述符仅由组成时,NEST也将与进行同样的操作
shouldclauses
。这是因为boolquery并没有完全遵循您希望从编程语言中获得的布尔逻辑。

总结一下:

term || term || term

变成

bool    should        term        term        term

term1 && (term2 || term3 || term4)
不会成为

bool    must         term1    should        term2        term3        term4

这是因为布尔查询一旦具有must子句,就应该开始作为促进因素。因此,在前面的内容中,您可能会得到仅包含

term1
此内容的结果,这在严格的布尔输入意义上显然不是您想要的。

为此,NEST将此查询重写为

bool     must         term1        bool should     term2     term3     term4

现在,这个错误开始起作用的地方就是您的情况

bool(should=term1, term2, minimum_should_match=2) ||term3
NEST标识OR操作的两侧仅包含应该子句,它将它们连接在一起,这将给
minimum_should_match
第一个布尔查询的参数赋予不同的含义。

我只是为此推送了一个修复程序,它将在下一个版本中修复

0.11.8.0

感谢您抓住这个!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390960.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号