我想查询where price > 555 and price < 5555 and quantity > 33
我的查询如下:
$query = array(
'query' => queryFilters($filters),
'sort' => array($sortOrder[0] => $sortOrder[1], 'updated_at' => 'desc'),
'from' => ($page - 1) * $pageSize,
'size' => $pageSize,
);
现在,让我们假设我的过滤器就像:
filter[price_from]=555&filter[price_to]=5555&filter[quantity_from]=33
使queryFilters($filters)
成为什么应该是什么结果?
我尝试了来自this doc的过滤查询,但结果就像或(使用array of ranges: 0=>range[...], 1=>range[...], 2=>range[...])
但结果是或者查询。有什么建议吗?
query=>constant_score=>filter=>exists=>field[items]
的结果我也会queryFilters($filters)
和[缺失](相同的结构)。仅{1}}使用range
效果很好,但无法将其用于多个字段(price gte, lte)
。
答案 0 :(得分:2)
您基本上需要使用bool/must
和两个range
过滤器的类似内容:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"range": {
"price": {
"gt": 555,
"lt": 5555
}
}
},
{
"range": {
"quantity": {
"gt": 33
}
}
}
]
}
}
}
}
}
因此,您的queryFilters
函数需要从您获得的查询字符串中构建上述查询。我想从那里开始非常简单。