Elasticsearch不确定过滤器或查询是否应该是第一个

时间:2015-02-22 03:03:01

标签: php laravel elasticsearch

我正在使用ES作为我的Laravel应用程序。

我想要做的是搜索过滤。

我在标题字段上进行全文搜索,然后检查价格是否在0 - 9999之间,并且该活动设置为1。

但这两个查询似乎都能正常运行我的测试数据。但它们之间有什么区别?订单“查询”是否会发挥任何差异?

忽略语法,只需查看查询结构。

首次查询

'filtered' => [
                'query' => [
                    'match' => ['title' => Input::get('query')]
                ],
                'filter'=> [
                    'bool' => [
                        'must' => [
                            ['term' => [ 'active' =>  1] ],
                            [ 'range' => [
                                    'price' => [
                                        'gte' => 1,
                                        'lte' => 99999,
                                    ]
                                ]
                            ]
                        ]
                    ]
                ],
            ],

第二次查询

'filtered' => [
    'filter' => [
      'bool' => [
         'must' => [
            ['term' => [ 'status' =>  1] ], 
            [ 
               'range' => [
                  'price' => [
                      'gte' => 1,
                      'lte' => 99999,
                  ]
               ] 
            ]
         ]               
      ]
  ],
  'query' => [
      'match' => [
        'title' => Input::get('query', '')
      ]
   ]
]

提前致谢。

1 个答案:

答案 0 :(得分:3)

filter中提及queryfiltered query的顺序完全没有区别。首先为文档执行queryfilter的内容取决于strategy filtered query的专家级可选字段。有关详细信息,请阅读this