查询弹性搜索中的多个范围

时间:2015-09-07 11:34:12

标签: php elasticsearch

我想查询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)

1 个答案:

答案 0 :(得分:2)

您基本上需要使用bool/must和两个range过滤器的类似内容:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "range": {
                "price": {
                  "gt": 555,
                  "lt": 5555
                }
              }
            },
            {
              "range": {
                "quantity": {
                  "gt": 33
                }
              }
            }
          ]
        }
      }
    }
  }
}

因此,您的queryFilters函数需要从您获得的查询字符串中构建上述查询。我想从那里开始非常简单。