我有几个由ElasticSearch索引的实体类型(通过FOSElasticaBundle使用Elastica)。所有这些都具有重要性和重要性。 property,这是一个存储的整数。
我一直在使用功能得分查询,该查询可以根据其重要性对结果进行排序。
在elastica中,它看起来像这样:
$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);
这对我来说很好。直到我最近索引了一个新的实体类型。此新实体类型还具有重要性属性,该属性也是存储的整数。现在,当我对新实体或旧实体(过去工作正常)使用相同的功能评分查询时,我会遇到如下故障:
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?)
] ;
] ;
一些搜索产生了很多人认为params在ElasticSearch中是全局的,因此我可能在名为" important"的其他实体上有一个参数。这不是任何地方的整数......但事实并非如此。唯一的重要性"我在db中的参数都是相同的整数。
我已经尝试过-XPOST' http://localhost:9200/index/_optimize?max_num_segments=1'但这似乎也没有改变一件事。我甚至试过,根据另一个堆栈溢出讨论,改变"整数"价值为"长"在我的一个实体类型上并重新索引实体,这也没有做任何事情。
有人有什么想法吗?我已经把头发拉了几天了。