在尝试对 elasticsearch 7+ 中的文本字段进行排序时,它会引发错误,表明必须将 fielddata 显式设置为 true。但这伴随着额外内存消耗的沉重代价。作为一种解决方法,我决定使用将文本字段存储为关键字的规范化器。下面是规范化器和正在使用的 elasticquery。
//field mapping: {
"filterable_text": {
"match": "S_*",
"mapping": {
"copy_to": "_text",
"fields": {
"normalize": {
"type": "keyword",
"normalizer": "my_normalizer"
},
"keyword": {
"type": "keyword"
}
},
"type": "text",
"fielddata": true
}
}
}
//normalizer: "normalizer": {
"my_normalizer": {
"type": "custom",
"char_filter": [],
"filter": ["lowercase", "asciifolding"]
}
}
//query: {
"track_total_hits":false,
"query": {"wildcard": {"doc.S_gName.normalize": "Ami*"}},
"from" : 0,
"size" : 2,
"sort" : [{
"doc.S_gName" : {
"order" : "desc"
}
}]
}
但我仍然遇到同样的错误。有什么建议吗?
如果您的映射是正确的,并且您使用文本类型和关键字类型索引了相同的字段。然后你必须对关键字字段进行排序
如果我有这样的映射
"mappings": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
然后排序将是
"sort" : [{
"name.keyword" : {
"order" : "desc"
}
}]
在你的情况下,它会
"sort" : [{
"doc.S_gName.normalize" : {
"order" : "desc"
}
}]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句