2016-11-16 2 views
1

Это показатель моей модели в упругом поискеКак запросить элементы массива в упругом поиске

{ 
     "_index":"cars", 
     "_type":"car", 
     "_id":"3275", 
     "_version":4, 
     "_score":1, 
     "_source":{ 
     "category_id": 6, 
      "car_branches":[ 
      { 
       "id":32, 
       "name":"Type1" 
      }, 
      { 
       "id":33, 
       "name":"Type2" 
      }, 
      { 
       "id":36, 
       "name":"Type3" 
      } 
      ], 

     } 
    } 

Я могу запросить CATEGORY_ID с

Car.__elasticsearch__.search query:{match:{category_id: 6}}

Как запросить car_branches ? Я попробовал этот

response = Car.__elasticsearch__.search query:{match:{car_branches:[id: 32]}}

Я получаю Elasticsearch::Transport::Transport::Errors::BadRequest: [400]

+0

Что такое отображение поля 'car_branches'? Запустите этот 'curl -XGET localhost: 9200/cars/_mapping/car' и обновите свой вопрос с помощью полученного вами результата. – Val

+0

https://gist.github.com/anonymous/e90d5c881635f682f3a25b5235dcf91a @Val – gates

+0

Можете ли вы показать свое картографическое определение модели своих автомобилей (в рубине)? – Val

ответ

0

в первую очередь необходимо удалить индекс первого и воссоздать его. Прежде чем сделать это, вы должны изменить свое отображение и сделать car_branches поле nested, как это:

indexes :car_branches, type: 'nested' do 
     indexes :id 
     indexes :name 

Тогда вы будете иметь возможность сделать запрос, ваш хочет, как это:

response = Car.__elasticsearch__.search query:{nested:{path: 'car_branches', query:{term:{'car_branches.id':[32]}}}} 
+0

Mapping как этот '' 'четкости as_indexed_json (Options = {}) as_json ( только: [: category_id], включают в себя: { car_branches: {только: [: идентификатор,: имя]} } ) end''' – gates