Мои документы выглядят так:
{
"ownID": "Val_123",
"parentID": "Val_456",
"someField": "Val_78",
"otherField": "Val_90",
...
}
Я пытаюсь получить все (уникальные, как в одном случае) результаты для списка ownID значений при фильтрации по список parentID значений и наоборот.
Что я сделал до сих пор:
- Получить (отдельно!) уникальные значения для ownID и parentID in key1 и key2
{
"size": 0,
"aggs": {
"key1": {
"terms": {
"field": "ownID",
"include": {
"partition": 0,
"num_partitions": 10
},
"size": 100
}
},
"key2": {
"terms": {
"field": "parentID",
"include": {
"partition": 0,
"num_partitions": 10
},
"size": 100
}
}
}
}
- Используйте фильтр для получения (некоторых) результатов, соответствующих либо ownID ИЛИ parentID
{
"size": 0,
"query": {
"bool": {
"should": [
{
"terms": {
"ownID": ["Val_1","Val_2","Val_3"]
}
},
{
"terms": {
"parentID": ["Val_8","Val_9"]
}
}
]
}
},
"aggs": {
"my_filter": {
"top_hits": {
"size": 30000,
"_source": {
"include": ["ownID", "parentID","otherField"]
}
}
}
}
}
Однако мне нужно получить отдельные результаты для каждого фильтра во втором запросе, и получите:
- (1) parentID документов, соответствующих некоторому значению ownID
- (2) ownID для документов, соответствующих некоторому значению parentID .
Пока мне удалось сделать это с помощью двух похожих запросы (см. ниже для (1) ), но в идеале хочу объединить их и запросить только один раз.
{
"size": 0,
"query": {
"bool": {
"should": [
{
"terms": {
"ownID": [ "Val1", Val_2, Val_3 ]
}
}
]
}
},
"aggs": {
"my_filter": {
"top_hits": {
"size": 30000,
"_source": {
"include": "parentID"
}
}
}
}
}
Я использую Elasticsearch версии 5.2