1. У меня есть гибкая схема поиска ниже.
{
"mappings": {
"properties": {
"process_id": {
"type": "keyword"
},
"user_info": {
"type": "nested",
"properties": {
"first_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"last_name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"place": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
2. Я добавил следующие документы в указатель.
POST processes/_bulk
{"index":{"_id":1}}
{"process_id": "123", "user_info": [{"first_name": "A", "last_name": "B","place":"London"},{"first_name": "C", "last_name": "D","place":"Moscow"}]}
{"index":{"_id":2}}
{"process_id": "123", "user_info": [{"first_name": "C", "last_name": "B","Place":"Delhi"},{"first_name": "A", "last_name": "D","Place":"Bangalore"}]}
3. Я хотел найти process_id как 123, first_name как A и last_name как B, а также агрегировать на месте user_info. Я пытаюсь сделать это, как показано ниже.
{ "query": {
"bool": {
"must": [
{
"query_string": {
"query": "process_id:123"
}
},
{
"nested": {
"path": "user_info",
"query": {
"query_string": {
"query": "user_info.first_name:A AND user_info.last_name:B"
}
}
}
}
]
} }, "aggs": {
"user_info": {
"nested": {
"path": "user_info"
},
"aggs": {
"user_info.place": {
"terms": {
"field": "user_info.place"
}
}
}
} } }
Результат возвращает первый документ правильно. Тем не менее, совокупность на местах возвращается и в Лондон, и в Москву. Однако я хочу, чтобы Лондон был возвращен как выходной. Я не уверен, как поступить с этим. Я также пробовал объединение поиска по вложенным фильтрам, но безуспешно.