2016-02-22 5 views
3

У меня есть такой индекс:ElasticSearch: запрос вложенные объекты, которые спичка фильтр

{ 
    "id":2, 
    "name":"test home", 
    "city_id":"31", 
    "county_id":"1", 
    "zip_code":"123", 
    "residencePlans":[ 
    { 
     "id" : 1, 
     "unit_price_from":480240, 
     "bathrooms_count":3, 
     "interior_area_sqrft":23, 
     "floor_range_hight":5, 
     "bedrooms_count":5, 
     "elevator_type_id":4, 
     "price_psqft":3756, 
    }, 
    { 
     "id" : 2, 
     "unit_price_from":123456, 
     "bathrooms_count":1, 
     "interior_area_sqrft":12, 
     "floor_range_hight":4, 
     "bedrooms_count":2, 
     "elevator_type_id":3, 
     "price_psqft":1234, 
    } 
    ], 
} 

И тогда я использую некоторые фильтры. Некоторые из них применяются к верхнему объекту, а некоторые - к вложенности.

Мне нужно запросить residencePlans, что соответствует фильтру, применяется для их. например, фильтр на residencePlans.bathrooms_count> = 3 должен возвращать только место жительства с ID = 1 и не 2.

{ 
    "id": [2], 
    "residencePlans.id": [1] 
} 

Я пометил residencePlans как вложен отображение, но это не помогает.

+0

Вы имеете в виду * residencePlans.unit_price_from> = 300000 *? Оба ** проживанияPlans ** в вашем примере имеют «unit_price_from» больше 3. – BrookeB

+0

Моя опечатка. Я имею в виду ** bathroom_count **. – ErickSkrauch

ответ

2

заказ документация здесь: https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-query.html

И здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-inner-hits.html

Что-то, как это должно сделать это

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { "match": { "id": 1 }}, 
     { 
      "nested": { 
      "path": "residencePlans", 
      "query": { 
       "bool": { 
       "must": [ 
        { "gte": { "residencePlans.unit_price_from": 3 }} 
       ] 
       } 
      } 
      } 
     } 
     ] 
    }, 
    inner_hits: {} 
    } 
} 

Я пересмотрел свой ответ, чтобы принять во внимание сведения о фильтрации вашего документ верхнего уровня и ваши вложенные документы. Пожалуйста, дайте мне знать, если это сработает для вас!

+0

Да, в этом случае я получу полный документ, но мне нужен exctly идентификатор верхнего уровня doc и residentPlans, который соответствует этому фильтру. – ErickSkrauch

+0

Чтобы быть понятным, проблема в том, что вы не получаете соответствующие планы проживания, включенные в результат? –

+0

Напротив: я получаю все планы проживания, но хочу только совпадения. – ErickSkrauch

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