在弹性搜索中,我使用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');
在多维数组中进行自然排序的函数:
function nat_multi_sort ($a, $b) {
return strnatcmp($a['line_1'], $b['line_1']);
}
usort($array, 'nat_multi_sort');
这需要使用脚本来解决。如果地址中的第一个标记是数字,则单独使用该数字进行排序。或者传递正无穷大作为排序值。
{
"sort": [
{
"_script": {
"script": "try { Integer.parseInt(doc['address'].value); } catch(Exception e){ return Integer.MAX_VALUE;}",
"type": "number",
"order": "asc",
"lang": "groovy"
}
}
]
}
这样,不以数字开头的地址将被发送到末尾。带有数字的将根据其数值进行排序