Заставить Elastic Search возвращать определенные элементы из списка

У меня есть список сложных объектов (адрес в приведенном ниже примере), где каждый объект имеет атрибуты как {string,string,string,string,string}.

Я хочу сделать фильтрацию в списке и вместо всего документа я просто хочу получить 2 элемента из списка в ответ. Является ли это возможным?

например Клиент: {id, список адресов: {улица, город, почтовый индекс, штат, страна} }

Если у нас есть 5 адресов и мы хотим применить фильтр к значению города объекта адреса, возможно ли это в эластичном поиске?

Я знаю, что у нас есть включение и исключение, с помощью которых мы можем фильтровать по атрибуту, но можем ли мы также фильтровать на основе значения атрибута? Вместо того, чтобы получать все 5 адресов, присутствующих в документе, можем ли мы получить все атрибуты, но для адресов мы извлекаем элементы, имеющие город = «Чикаго» в выходных данных эластичного? Вложенное сопоставление выглядит следующим образом:

{
"mappings": { 
"employee": 
{ 
"properties": 
{ 
"addrBean": { "type": "nested", 
"properties": { 
"addrId": { "type": "integer" }, 
"city": { "type": "string" }, 
"state": { "type": "string" }, 
"country": { "type": "string" } 
} } } } 
}
} 

person Divyesh Kalbhor    schedule 17.08.2018    source источник
comment
Является ли address-list действительно списком или просто внутренним объектом? Иными словами, может ли клиент иметь несколько адресов в address-list или только один?   -  person Val    schedule 17.08.2018
comment
У клиента может быть несколько адресов. Нам нужен объект клиента в ответе, но мы хотим ограничить адреса в выводе с помощью фильтра. например у клиента 3 адреса с городами Чикаго, Молин, Рим; мы хотим отфильтровать ответ и получить только Чикаго в ответе от elastic вместе с другими атрибутами в документе клиента.   -  person Divyesh Kalbhor    schedule 17.08.2018
comment
Является ли поле address-list типа nested?   -  person Val    schedule 17.08.2018
comment
Что вы подразумеваете под вложенным типом? Объект клиента имеет список адресов в качестве атрибута. Каждый список адресов имеет адресный компонент (адресный объект), который имеет 5 строковых атрибутов.   -  person Divyesh Kalbhor    schedule 17.08.2018
comment
Я имею в виду следующее: elastic.co/guide/en/elasticsearch/ ссылка/текущий/вложенный.html   -  person Val    schedule 17.08.2018
comment
Да, это так. Я могу использовать address.city для фильтрации выходных документов.   -  person Divyesh Kalbhor    schedule 17.08.2018
comment
то это ответ, который вам нужен: stackoverflow.com/questions/31719968/ (подсказка: используйте вложенные inner_hits)   -  person Val    schedule 17.08.2018
comment
Вэл, эта штука мне помогла, но у меня есть еще один список, который не является вложенным. Есть ли способ для этого? Или альтернативный вопрос может заключаться в том, как мне сделать его вложенным сейчас?   -  person Divyesh Kalbhor    schedule 17.08.2018
comment
Вам нужно изменить сопоставление и переиндексировать данные.   -  person Val    schedule 17.08.2018
comment
Кажется, я столкнулся с проблемой вложенной индексации. Столбцы с целочисленными данными доступны для поиска, а строковые значения — нет. например city ​​: 123 дает результаты, но city : Moline не дает результата. 0 просмотров. Город определяется как строковый тип данных.   -  person Divyesh Kalbhor    schedule 17.08.2018
comment
Чтобы воспроизвести проблему, вам необходимо предоставить дополнительную информацию, например карту и некоторые примеры данных, в противном случае мы стреляем в темноте.   -  person Val    schedule 17.08.2018
comment
{отображения: {сотрудник: {свойства: {addrBean: {тип: вложенный, свойства: {addrId: {тип: целое число}, город: {тип: строка}, состояние: {тип: строка}, страна: {тип: строка } } } } } }}   -  person Divyesh Kalbhor    schedule 17.08.2018
comment
Пожалуйста, обновите свой вопрос с этой информацией, она более разборчива   -  person Val    schedule 17.08.2018
comment
@Val: У тебя была возможность проверить это? Сталкивались ли вы с этой проблемой ранее?   -  person Divyesh Kalbhor    schedule 20.08.2018
comment
Я нашел проблему. Эластичный соответствует всему в нижнем регистре. Когда я даю все поля в нижнем регистре, все работает нормально.   -  person Divyesh Kalbhor    schedule 20.08.2018