2016-10-27 2 views
0

Я ошибка с elasticsearch:ожидается [END_OBJECT], но получил [FIELD_NAME]

"query_parsing_exception: ожидается [END_OBJECT], но получил [FIELD_NAME], возможно слишком много статей запроса"

Я использую elasticsearch с PHP, это мой поиск:

$search = [ 
      'index' => $this->getParameter('elastic_search')['index'], 
      'type' => 'profile', 
      'body' => [ 
       'query' => [ 
        'bool' => [ 
         'must' => [ 
          'range' => [ 
           'address.latitude' => [ 
            'gte' => $offer->getAddress()->getLatitude() - 0.05, 
            'lte' => $offer->getAddress()->getLatitude() + 0.05, 
           ], 
           'address.longitude' => [ 
            'gte' => $offer->getAddress()->getLongitude() - 0.05, 
            'lte' => $offer->getAddress()->getLongitude() + 0.05, 
           ], 
           'budget' => [ 
            'gte' => $offer->getPrice() - 100, 
            'lte' => $offer->getPrice() + 100, 
           ], 
          ], 
          'bool' => [ 
           "term" => [ 
            "type" => 1 
           ] 
          ] 
         ] 
        ] 
       ], 
       'from' => $request->get('start', 0), 
       'size' => $request->get('limit', 4), 
       'sort' => [], 
       '_source' => ['exclude' => 'user'], 
      ] 
     ]; 

чем проблема пожалуйста?

ответ

2

Каждый запрос range должен быть в своем собственном элементе массива, и все запросы bool/must должны быть заключены в массив. Вы можете сделать это следующим образом:

$search = [ 
     'index' => $this->getParameter('elastic_search')['index'], 
     'type' => 'profile', 
     'body' => [ 
      'query' => [ 
       'bool' => [ 
        'must' => [ 
         [ 
         'range' => [ 
          'address.latitude' => [ 
           'gte' => $offer->getAddress()->getLatitude() - 0.05, 
           'lte' => $offer->getAddress()->getLatitude() + 0.05, 
          ] 
         ] 
         ], 
         [ 
         'range' => [ 
          'address.longitude' => [ 
           'gte' => $offer->getAddress()->getLongitude() - 0.05, 
           'lte' => $offer->getAddress()->getLongitude() + 0.05, 
          ], 
         ], 
         ], 
         [ 
         'range' => [ 
          'budget' => [ 
           'gte' => $offer->getPrice() - 100, 
           'lte' => $offer->getPrice() + 100, 
          ], 
         ], 
         ], 
         [ 
          "term" => [ 
           "type" => 1 
          ] 
         ] 
        ] 
       ] 
      ], 
      'from' => $request->get('start', 0), 
      'size' => $request->get('limit', 4), 
      'sort' => [], 
      '_source' => ['exclude' => 'user'], 
     ] 
    ]; 
+0

любая удача с этим? – Val

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