У меня есть несколько типов сущностей, проиндексированных ElasticSearch (используя Elastica через FOSElasticaBundle). Все они имеют свойство «Важность», которое является сохраненным целым числом.
Я использовал запрос оценки функции, который хорошо работал для сортировки результатов по их важности.
В эластике это выглядит примерно так:
$nameQuery = new \Elastica\Query\QueryString();
$nameQuery->setFields(array('name'))
->setDefaultOperator('AND')
->setQuery($name);
//Create the script score that will modulate the score
$scriptScore = new \Elastica\Script("doc['importance'].value");
//Create the Function Score query that will bring it all together
$functionScoreQuery = new \Elastica\Query\FunctionScore();
$functionScoreQuery->setQuery($nameQuery);
$functionScoreQuery->addScriptScoreFunction($scriptScore);
$functionScoreQuery->setScoreMode('multiply');
$results = $this->find($functionScoreQuery);
Это работало нормально для меня, пока я недавно не проиндексировал новый тип сущности. Этот новый тип сущности также обладает свойством важности, которое также является сохраненным целым числом. Теперь, когда я использую этот же запрос Function Score либо для новой сущности, либо для старых сущностей (которые раньше работали нормально), я получаю ошибку, подобную следующей:
Query Failed [
Failed to execute main query
]
] ; nested:GroovyScriptExecutionException [
ElasticsearchException [
java.lang.NumberFormatException:Invalid shift value in prefixCoded bytes (is encoded value really an INT?)
] ; nested:UncheckedExecutionException [
java.lang.NumberFormatException:Invalid shift value in prefixCoded bytes (is encoded value really an INT?)
] ; nested:NumberFormatException [
Invalid shift value in prefixCoded bytes (is encoded value really an INT?)
] ;
] ;
Некоторые поиски заставляют задуматься о том, что параметры являются глобальными во всем ElasticSearch, и поэтому у меня может быть параметр для некоторой другой сущности с именем «важность», который нигде не является целым числом … но это не так. Единственные «важные» параметры, которые у меня есть в БД, — все идентичные целые числа.
Я пробовал -XPOST ‘HTTP: // локальный: 9200 / индекс / _optimize max_num_segments = 1?‘но это также, казалось, не изменило вещь. Я даже пытался, основываясь на другом обсуждении переполнения стека, изменить значение «целое» на «длинное» для одного из типов моих сущностей и переиндексировать сущность, это также ничего не сделало.
У кого-нибудь есть идеи? Я выдергиваю волосы уже несколько дней.
Задача ещё не решена.
Других решений пока нет …