2015-08-26 2 views
0

Я пытаюсь фильтровать данные на основе выбора пользователя.Значение столбца упругого поиска выбирает все, если ничего не выбрано

в качестве примера, если пользователь выбрать имя «Smith» и «Тип (который самец самка)», он на самом деле работает отлично.

Проблема заключается в том, что пользователь не выбирает какое-либо имя и просто выбирает только тип, чем на основе типа, который должен запрашивать данные, а это означает, что он должен выбирать все «имена» вместо того, чтобы выбирать одиночные имена.

Теперь, если пользователь не выбирает какое-либо имя, он возвращает нулевое значение в запросе, так как я могу заставить запрос действовать, когда ничто не является «сообщением», оно должно «выбрать все».

Кто-нибудь знает какое-либо решение этой проблемы!

if ($request->getMethod() == 'POST') { 
     $name = $request->request->get('name'); // get requested name 
     $type = $request->request->get('type'); // Which is male of female 

     $params = array(
      'index' => "myIndex", 
      'type' => "myType", 
      'body' => array(
       'query' => array(
        'bool' => array(
         'should' => array(
          'query_string' => array(
           'default_field' => 'name', 
           'query' => $name 
          ) 
         ) 
        ) 
       ), 
       'term' => array(
        "type" => $type 
       ) 
      ) 
     ); 


     $docs = $client->search($params); 

Для делаете его более ясным, как сделать условия для elasticserch если пост значения нуля выбрать все

ответ

1

Я думаю, вы должны просто построить свой запрос условно, то есть добавить каждое ограничение только если связанный параметр присутствует в запросе. Кроме того, у вас также есть другая проблема в вашем запросе, то есть запрос term неуместен, он должен быть расположен внутри bool/should, а не непосредственно в body. Так вот, как бы я это сделать:

if ($request->getMethod() == 'POST') { 
    $name = $request->request->get('name'); // get requested name 
    $type = $request->request->get('type'); // Which is male of female 

    // create the base skeleton of your query 
    $params = array(
     'index' => "myIndex", 
     'type' => "myType", 
     'body' => array(
      'query' => array(
       'bool' => array(
        'should' => array(
         // empty should clause for starters 
        ) 
       ) 
      ) 
     ) 
    ); 

    // add each constraint in turn depending on whether the param is specified 
    if (!empty($name)) { 
     $params['body']['query']['bool']['should'] = array(
      'query_string' => array(
       'default_field' => 'name', 
       'query' => $name 
      ) 
     ); 
    } 
    if (!empty($type)) { 
     $params['body']['query']['bool']['should'] = array(
      'term' => array(
       "type" => $type 
      ) 
     ); 
    } 
    // special case if none is present, just match everything 
    if (count($params['body']['query']['bool']['should']) == 0) { 
     $params['body']['query'] => array(
      'match_all' => array() 
     ); 
    } 

    $docs = $client->search($params); 
+0

Val спасибо за большую помощь :) –

+0

Всегда рад помочь ;-) – Val

Смежные вопросы