在弹性搜索中,我使用sort
按第一行地址排序。但是,如果地址以数字开头,则将其排序为:
1 Some Street
10 Some Street
12 Some Street
2 Some Street
22 Some Street
24 Some Street
我更愿意将其命名为1,2,10,12,22,24等。
在php中对代码进行排序:
$params['sort'] = array('line_1:asc');
答案 0 :(得分:1)
在多维数组中进行自然排序的函数:
function nat_multi_sort ($a, $b) {
return strnatcmp($a['line_1'], $b['line_1']);
}
usort($array, 'nat_multi_sort');
答案 1 :(得分:0)
这需要使用scripting来解决。 如果地址中的第一个标记是数字,则单独使用该数字进行排序。 或者将正无穷大作为排序值传递。
{
"sort": [
{
"_script": {
"script": "try { Integer.parseInt(doc['address'].value); } catch(Exception e){ return Integer.MAX_VALUE;}",
"type": "number",
"order": "asc",
"lang": "groovy"
}
}
]
}
这样,不会以数字开头的地址将被发送到最后。具有数字的那些将根据其数值
进行排序