Elasticsearch - foselastica按整数排序,结果很奇怪

时间:2015-01-08 11:02:14

标签: symfony sorting elasticsearch elastica foselasticabundle

我想根据嵌套(就业)对象的数量对公司的结果进行排序,

我向公司实体添加了一个额外的字段,其中包含如下计数:

private employeeCount;

getEmployeeCount(){
  return count($this->employments);
}

并将其添加到索引中:

            company:
                mappings:
                    fullname: ~ 
                    employeeCount: ~ 

该字段已正确编入索引,我得到如下命中:

"_hit": {
"_index": "search",
"_type": "company",
"_id": "2628",
"_source": {
"fullname": "acme",
"employeeCount": 9,
... },
"sort": [
"9"
]

我添加的类似:

$query->addSort(array('employeeCount' => array( 'order'=>'desc')));

并且结果似乎从"正确排序9,8,7,6 ......",

但由于某种原因,在某些地方有一些结果,其中有更高的employeeCount

例如:

"_hit": {
"_index": "search",
"_type": "company",
"_id": "2668",
"_source": {
"fullname": "acme2",
"employeeCount": 18,
... },
"sort": [
"18"
]

我希望这个结果能够在我的第一个例子之上,但它介于2和1之间

所以两个猜测,它从0到10排序,忽略大于10的所有内容

或者弹性搜索或foselastica包中存在一些错误,

见下结果查询:

search/company/_search (GET) 5.59 ms {"sort":[{"employeeCount":{"order":"desc"}}],"query":{"wildcard":{"fullname":{"value":"**","boost":1}}},"size":"2000","from":0}

任何人都有任何想法?

1 个答案:

答案 0 :(得分:0)

似乎它正在排序为字符串而不是整数。您可以在sort params中添加一个类型来指定整数。