我有这样的问题:我有一个数字字符串字段,用点分隔,如“1.1.2”,“11.2.1”等。我有一个要求,按这个字段排序,当我尝试按那个字段排序时,它进行字符串排序。所以我应该写一个分析器,在这个例子中,当'desc'按这个字段排序时,“11.2.1”排在第一位。我这样做我的Map和设置:
PUT your_index
{
"settings": {
"analysis": {
"analyzer": {
"custom_sort_analyzer": {
"tokenizer": "dot_tokenizer",
"filter": [
"numeric_sort_filter"
]
}
},
"tokenizer": {
"dot_tokenizer": {
"type": "pattern",
"pattern": "\\."
}
},
"filter": {
"numeric_sort_filter": {
"type": "pattern_replace",
"pattern": "(\\d+)",
"replacement": "$1",
"lowercase": true
}
}
}
},
"mappings": {
"properties": {
"your_field": {
"type": "text",
"analyzer": "custom_sort_analyzer",
"fielddata": true
}
}
}
}
字符串
但同样,当我做这种排序时,得到的不是正确的行为:
{
"query": "my_query",
"sort": [
{
"my_field": {
"order": "asc"
}
}
]
}
型
1条答案
按热度按时间gzjq41n41#
这些值看起来像是版本号,如果是这种情况,有一个更简单的选择,使用
version
field type,它完全按照您喜欢的方式工作。字符串
则以下查询首先返回11.2.1
型