查询语句:
POST food-ingredients-ext/_search
{
"from": 0,
"size": 20,
"query": {
"multi_match": {
"query": "cake mix",
"type": "phrase",
"fields": [
"manufacture",
"brand",
"name"
]
}
},
"highlight": {
"fields": {
"name": {
"pre_tags": [
"<em>"
],
"post_tags": [
"</em>"
]
}
}
},
"sort": [
{
"name": {
"order": "asc"
},
"_score": {
"order": "desc"
}
}
]
}
报错:
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
}
],
"type" : "search_phase_execution_exception",
"reason" : "all shards failed",
"phase" : "query",
"grouped" : true,
"failed_shards" : [
{
"shard" : 0,
"index" : "food-ingredients-ext",
"node" : "XBz2-lMTTHaljuXUKeWzgw",
"reason" : {
"type" : "illegal_argument_exception",
"reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
}
}
],
"caused_by" : {
"type" : "illegal_argument_exception",
"reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index. Note that this can use significant memory.",
"caused_by" : {
"type" : "illegal_argument_exception",
"reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
}
}
},
"status" : 400
}
原因分析:text字段作为一个整体,默认没有索引。不过text分词之后的keyword是有索引的,因而可以对name.keyword进行聚合。
POST food-ingredients-ext/_search
{
"from": 0,
"size": 20,
"query": {
"multi_match": {
"query": "cake mix",
"type": "phrase",
"fields": [
"manufacture",
"brand",
"name"
]
}
},
"highlight": {
"fields": {
"name": {
"pre_tags": [
"<em>"
],
"post_tags": [
"</em>"
]
}
}
},
"sort": [
{
"name.keyword": {
"order": "asc"
},
"_score": {
"order": "desc"
}
}
]
}