es多条件查询php,在PHP中elasticsearch多个范围

小编典典

您的回答是正确的。顺便说一句,如果您使用bool过滤器而不是一and/or/not组过滤器,性能往往会更好。并非总是如此,但通常如此。

和/或/不适用于“跨越式迭代器”模式。这将在第一个过滤器中找到第一个匹配的文档,然后尝试“跳过”其余的过滤器迭代器,直到它们都在同一文档上对齐为止。这使得它对于稀疏过滤器非常有效。

相比之下,Bool过滤器会按位组合位图(表示匹配的文档),这对于密度更高的过滤器而言往往更为有效。您的过滤器看上去相对密集:

该number_of_products过滤器是所有values >= $products['min'],这可能是一个大数目的匹配文档的所有…在一个连续的范围

price滤波器的密度取决于范围的大小,但也可能非常密集(且连续)。如果没有$ price [‘max’],它也将无穷大。

在实践中,布尔值倾向于提供比和/或/非更好的性能,并且在此示例中可能会比YMMV更好。:)

$searchParams = [

'index' => 'my_index',

'type' => 'my_type',

'body' => [

'query' => [

'filtered' => [

'filter' => [

'bool' => [

'must' => [

[

'range' => [

'number_of_products' => [

'gte' => $products['min']

]

]

],

[

'range' => [

'price' => [

'gt' => $price['min'],

'lt' => ($price['max'] ? : null)

]

]

]

]

]

]

]

]

]

];

2020-06-22

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值