Это для ElasticSearch 6.4.1.
Клиент является архивом, и записи имеют поле «RefNo» (ссылочный номер), которое определяет, как они в основном идентифицируют записи.Однако это не простое поле, а поле, разделенное косой чертой, которое представляет иерархию записей, где каждый идентифицирующий раздел может представлять собой смесь цифр и букв, так что, например, «abc» представляет одну коллекцию, а «a142» - другую:abc / foo "," abc / bar "," a142 / 1 / letters "," a142 / 2 / letters "," a142 / 10 / letters "- это различные элементы на разных уровнях.Они выглядят довольно абстрактно для меня, но для архивариусов они действительно значимы.
Я думаю, вы можете предвидеть проблему.Я хочу иметь возможность упорядочить это поле (на самом деле это ключевое слово с именем RefNo.keyword) таким образом, который дает очевидный, естественный порядок:
a15
a142
abc
abc/bar
abc/bar/1
abc/bar/2
abc/bar/10/letters
abc/bar/10/letters/1
abc/bar/10/letters/2
abc/foobar/
и так далее.Хитрость заключается в том, чтобы упорядочить числовые разделы в естественном числовом порядке, а не в алфавитном порядке, тогда как остальная часть - в алфавитном порядке.
В другом контексте у меня есть список дочерних записей одной записи, и вВ этом случае решением было упорядочить сначала по длине поля, а затем численно:
"sort:[
"_script":{
"script":"doc['RefNo.keyword'].value.length()",
"type":"number",
"order":asc"
},
"RefNo.keyword":{
"order":"asc"
}
]
Но, конечно, это работает, только если все значения идентичны, кроме последнего раздела.
В общем случае у меня есть ощущение, что я упускаю что-то очень простое.Это просто желаемое за действительное?
Спасибо, Бен