Вам нужно использовать вложенный тип данных в ваш случай, поскольку тип данных объекта сглаживается и обрабатывается отдельно, что приводит к тому, что оба документа совпадают с результатом, добавит рабочий пример.
Но имейте в виду, что вложенный тип данных становится дорогостоящим, когда у вас большой набор данных и большое количество одновременных запросов, как описано в средний блог go-jek.
Следуйте этому блог, в котором подробно освещается ваша проблема.
Рабочий пример с правильным сопоставлением
Сопоставление индекса
{
"mappings": {
"properties": {
"name" : {
"type" : "text"
},
"people": {
"type": "nested"
}
}
}
}
указать образец документа
{
"name": "bar",
"people":
[
{
"id": 1,
"role": "other"
},
{
"id": 2,
"role": "admin"
}
]
}
И второй образец документа
{
"name": "foo",
"people":
[
{
"id": 1,
"role": "admin"
},
{
"id": 2,
"role": "other"
}
]
}
Поисковый запрос
{
"query": {
"nested": {
"path": "people",
"query": {
"bool": {
"must": [
{
"match": {
"people.id": 1
}
},
{
"match": {
"people.role": "admin"
}
}
]
}
}
}
}
}
И ожидаемый результат поиска
"hits": [
{
"_index": "matchphrase",
"_type": "_doc",
"_id": "1",
"_score": 1.6931472,
"_source": {
"name": "foo",
"people": [
{
"id": 1,
"role": "admin"
},
{
"id": 2,
"role": "other"
}
]
}
}
]
person
user156327
schedule
04.11.2020