У меня есть поле «location_facet», которое является стриг с отображением
"location_facet": {
"type": "string",
"index": "not_analyzed",
"include_in_all": true
},
В этом поле у меня есть location_ids, и я бы хотел сгруппировать их по запросу. Также я хочу получить некоторую информацию по агрегации, поэтому я хотел бы выполнить скрипт, например, я хочу стать названием города, но всегда возникает ошибка:
"aggs": {
"location_radius": {
"terms": {
"field": "location_facet",
"size": 10,
"script": "doc[\"location_name\"].value"}
}
},"type": "script_exception",
"reason": "failed to run inline script [doc[\"location_name\"].value] using lang [groovy]"
У меня есть эта реализация с Facets:
$tagFacet = new \Elastica\Facet\Terms("location_radius");
$tagFacet->setField('location_name');
$tagFacet->setAllTerms(true);
$tagFacet->setSize(100);
$tagFacet->setScript(
"doc['location'].empty ? null : ceil(doc['location'].arcDistanceIn".$unit."(".
$entries->getLocationLatitude().", ".
$entries->getLocationLongitude().")) + '|' + doc['location_name'].value
+ '|' + doc['location_id'].value");
Что я делаю не так?
Если я проверю это:
"aggs": {
"location_radius": {
"terms": {
"field": "location_facet",
"size": 10,
"script": "doc['location'].empty ? null : ceil(doc['location'].arcDistanceInKm(51.2249429, 6.7756524))"}
}
},
Я получаю ошибку:
"type": "script_exception",
"reason": "failed to run inline script [doc['location'].empty ? null : ceil(doc['location'].arcDistanceInKm(51.2249429, 6.7756524))] using lang [groovy]",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Negative position"}
Решение: Все поля документа, которые я могу использовать, также должны быть «index»: «not_analyzed».
Задача ещё не решена.
Других решений пока нет …