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

&&和||怎么做 在NEST中构建查询?,第1张

&&和||怎么做 在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

感谢您抓住这个!



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4973605.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-14
下一篇2022-11-13

发表评论

登录后才能评论

评论列表(0条)

    保存