2015-02-22 2 views
0

Я использую ES для своего приложения Laravel.Elasticsearch не уверен, что сначала должен быть фильтр или запрос

Что я хочу сделать, это фильтрация поиска.

Я делаю полнотекстовый поиск на поле заголовка, а затем проверить, что цена находится в пределах от 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', '') 
     ] 
    ] 
] 

Спасибо заранее.

ответ

3

Не имеет значения вообще, в каком порядке filter и query указаны в filtered query. Что диктует, если query или filter выполняется первым для документа, зависит от дополнительного поля экспертного уровня, которое называется strategy от filtered query. Для получения дополнительной информации см. this.