我有一个用例来表示弹性搜索中的难度级别(容易、中等、困难)的枚举,并支持该字段上的排序。如果此字段被索引为字符串,则排序将不会按预期工作。
支持这一点的一种方法是为ES中的每个枚举建立整数值索引,并在ES返回排序结果时将其映射为字符串值。
是否还有其他替代方案,比如ES本身负责按枚举顺序进行排序,而此字段作为字符串进行索引?我可以为字段指定自定义排序函数吗?function_score是一个选项,但是如果我必须根据枚举顺序进行排序,还有比定义自定义function_score更好的方法吗
在我的用例中,有多个这样的枚举定义了跨维度的比例,如难度、高度(低、中、高)、等级(好、中、差)等。以上两种解决方案都需要自定义工作,因为引入了一个新的维度。上面的任何一种方法都可以推广吗?
发布于 2021-06-10 20:41:44
您可以查看相同问题的答案here。您需要使用如下所示的script_score:
GET /my-index-2/_search
{
"query": {
"script_score": {
"query": {
"match_all":{}
},
"script": {
"source": "if (doc['field name'].value == 'EASY'){2} else if(doc['field name'].value == 'MEDIUM') {1} else if(doc['field name'].value == 'DIFFICULT') {0}"
}
}
}
}https://stackoverflow.com/questions/67916392
复制相似问题