Я создал карту для индексации моей коллекции mongoDb
с использованием эластичного поиска. Вот это mapping
свойства:Эластичный поиск - отличительные элементы из нескольких полей
"properties" : {
"address_components" : {
"properties" : {
"_id" : {
"type" : "string"
},
"subLocality1" : {
"type" : "string",
"index" : "not_analyzed"
},
"subLocality2" : {
"type" : "string",
"index" : "not_analyzed"
},
"subLocality3" : {
"type" : "string",
"index" : "not_analyzed"
},
"city" : {
"type" : "string",
"index" : "not_analyzed"
}
}
Теперь я хочу, чтобы получить общие уникальные элементы из этих полей: subLocality1
, subLocality2
, subLocality3
, city
. Кроме того, каждое из значений distinct
должно содержать q
в качестве подстроки. Отдельный элемент должен также содержать соответствующее значение city
.
Пример:
"address_components" : {
"subLocality1" : "s1"
"subLocality2" : "s1",
"subLocality3" : "s2",
"city":"a"
}
"address_components" : {
"subLocality1" : "s3"
"subLocality2" : "s1",
"subLocality3" : "s2",
"city":"a"
}
"address_components" : {
"subLocality1" : "s2"
"subLocality2" : "s1",
"subLocality3" : "s4",
"city":"a"
}
Для получения указанного выше показателей, ожидаемого результата:
"address_components" : {
"subLocality1" : "s1"
"subLocality2" : "s1",
"subLocality3" : "s2",
"city":"ct1"
}
"address_components" : {
"subLocality1" : "s3"
"subLocality2" : "s1",
"subLocality3" : "s2",
"city":"ct1"
}
"address_components" : {
"subLocality1" : "s2"
"subLocality2" : "s1",
"subLocality3" : "s4",
"city":"ct1"
}
{s1, a}, {s2,a}, {s3,a}, {s4,a},{a,a}
Я пытался сделать это с помощью эластичного Поиска terms
агрегации.
GET /rescu/rescu/_search?pretty=true&search_type=count
{
"aggs" : {
"distinct_locations" : {
"terms" : {
"script" : "doc['address_components.subLocality1'].value"
}
}
}
}
Но terms
агрегирование применяется только для одного поля в соответствии со следующими link.