У меня есть основной запрос, и мне нужно количество совпадений для пары подзапросов. Другими словами, мне нужен facet.query. Чего мне не хватает, так это простой doc_count
агрегации, такой как агрегация value_count.
Какие-либо предложения?
Я нашел два возможных решения, которые мне не нравятся:
- Используйте агрегацию фильтров с показателем value_count. на
_id
:
пример:
GET _search
{
"query": {
"match_main": {}
},
"aggs": {
"facetvalue1": {
"filter": {
"bool": {
"should": [
{"match": { "name": "fred" }},
{"term": { "lastname": "krueger" }}
]
}
},
"aggs": {
"count": {
"value_count": {
"field": "_id"
}
}
}
},
"facetvalue2": {
"filter": {
"term": { "name": "freddy" }
},
"aggs": {
"count": {
"value_count": {
"field": "_id"
}
}
}
}
}
}
- Используйте API мультипоиска.
пример:
GET _msearch
{"index":"myindex"}
{"query":{"match_main": {}}}
{"index":"myindex"}
{"size": 0, "query":{"match_main": {}}, "filter": {"bool": {"should":[{"match": { "name": "fred" }},{"term": { "lastname": "krueger" }}]}}}
{"index":"myindex"}
{"size": 0, "query":{"match_main": {}},"filter": {"term": { "name": "freddy" }}}
Я вижу, что решение 2 быстрее, но представьте match_main
как сложный запрос! Поэтому я бы предпочел решение 1, если бы вместо value_count:{"field":"_id"}
было doc_count:{}
.
Но вернемся к моему основному вопросу: что является аналогом solr facet.query
в elasticsearch?