弹性搜索字符串中的排序编号

时间:2014-12-29 02:56:06

标签: php elasticsearch lucene

在弹性搜索中,我使用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');

2 个答案:

答案 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"
      }
    }
  ]
}

这样,不会以数字开头的地址将被发送到最后。具有数字的那些将根据其数值

进行排序