Вы можете использовать агрегирование terms
на поле not_analyzed
.
Однако, по умолчанию это ограничение относится к числу 10 самых популярных терминов. Вы можете изменить это, обновив параметр size
агрегации terms
. Установка его на 0
позволит вам получить до Integer.MAX_VALUE
различные условия (см. Документацию here).
Ниже приведен пример отображения:
POST terms
{
"mappings":{
"test":{
"properties":{
"title":{
"type":"string",
"index":"not_analyzed"
}
}
}
}
}
Добавление некоторых документов:
POST terms/test
{
"title":"Foundation"
}
POST terms/test
{
"title":"Foundation & Empire"
}
Наконец, запрос:
POST terms/_search?search_type=count
{
"aggs": {
"By Title": {
"terms": {
"field": "title",
"size": 0
}
}
}
}
даст вам то, что вам нужно:
"aggregations": {
"By Title": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Foundation",
"doc_count": 1
},
{
"key": "Foundation & Empire",
"doc_count": 1
}
]
}
}
Помните, что если у вас есть большое количество условий, этот запрос будет очень дорогим для выполнения.