elasticSearch Alternatively use a keyword field instead
- 情景再现
- 原因分析
情景再现
索引user中有三个字段,根据age进行排序查询出现的问题
GET /user/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
然后就抛出来这么大一串的日志信息
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
}
],
"type": "search_phase_execution_exception",
"reason": "all shards failed",
"phase": "query",
"grouped": true,
"failed_shards": [
{
"shard": 0,
"index": "user",
"node": "oPHyvjEKR1u6ltdy9L2nsQ",
"reason": {
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
}
}
],
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [age] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
}
}
},
"status": 400
}
原因分析
我们可以查看创建的索引的映射信息
查询映射
GET /user/_mapping
{
"user" : {
"mappings" : {
"properties" : {
"age" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
省略。。。。。。
}
}
}
}
}
我们可以查询age
的字段类型type ,是text,这个是不支持排序操作的,需要设置type位keyword才可以
也就是重新创建映射
第二种解决方案,就是直接指定是age的keyword进行查询
GET /user/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age.keyword": {
"order": "desc"
}
}
]
}
更多推荐
elasticSearch Alternatively use a keyword field instead.
发布评论