2015-07-30 2 views
3
{ 
    class: 1, 
    users: [{ 
     name: 'abc', 
     surname: 'def' 
    }, { 
     name: 'xyz', 
     surname: 'wef' 
    }, { 
     name: 'abc', 
     surname: 'pqr' 
    }] 
} 

У меня есть структуру документа, как над объектом, и я хочу вернуть только те пользователи, которые имеют название «ABC», но проблема в том, что совпадает с именем «ABC», но возвращает весь массив. Я хочу только согласованных пользователей.выберите совпадающие объекты из массива в elasticsearch

Mapping -

{ 
     "class":"string", 
     "users" : { 
      "type" : "nested", 
      "properties": { 
       "name" : {"type": "string" }, 
       "surname" : {"type": "string" } 
      } 
     } 
    } 
+0

Вы можете показать свой запрос? и, возможно, также ваше сопоставление? – Val

ответ

4

Тогда, если у вас есть users поле отображается в nested типа, это хорошее начало!

Использование nested inner_hits, вы можете получить только имена сопоставления пользователей с запросом, как это:

{ 
    "_source": false, 
    "query": { 
    "nested": { 
     "path": "users", 
     "inner_hits": {  <---- this is where the magic happens 
     "_source": [ 
      "name" 
     ] 
     }, 
     "query": { 
     "bool": { 
      "must": [ 
      { 
       "term": { 
       "users.name": "abc" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

большое спасибо –

+0

можем ли мы сделать «_source»: false для конкретного _type? –

+0

Вы можете сузить свой поисковый запрос до определенного типа, указав тип непосредственно в URL '/ my_index/my_type/_search', если это то, что вы имеете в виду. – Val

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