这实际上是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) ||term3NEST标识OR操作的两侧仅包含应该子句,它将它们连接在一起,这将给
minimum_should_match第一个布尔查询的参数赋予不同的含义。
我只是为此推送了一个修复程序,它将在下一个版本中修复
0.11.8.0
感谢您抓住这个!



