У меня есть поле, индексированное как String вasticsearch 5
Например 20090219, 20100416 так далее
Я могу сделать агрегацию этих данных, но я хочу агрегировать по подстроке.
это на
2009,2010
Я не хочу конвертировать в дату. Я хочу получить первым 4 персонажа и получить счет.
Это мой текущий код. Очень плохо знаком с Elasticsearch
$params['body']["aggs"]["Year"]["terms"]["field"] = "PublicationDate.keyword";
$params['body']["aggs"]["Year"]["terms"]["size"] = 10;
$params['body']["aggs"]["Year"]["terms"]["order"]["_count"] = "desc";
Вы можете использовать эластичный поиск script
особенность, чтобы достигнуть этого.
GET my-index/_search
{
"aggs" : {
"my-agg" : {
"terms" : {
"script": {
"inline": "doc['PublicationDate.keyword'].getValue().substring(0,4)"},
"size": 10,
"order" : { "_count" : "desc" }
}
}
}
}
Я не знаю эквивалент php
скрипт для вышеприведенной команды, но поверьте, вы сможете заставить его работать в php
,
это сделало задачу
$params['body']["aggs"]["PublicationYear"]["terms"]["script"] = "_value.substring(0,4)";