我有一个带有表达评级的关键字字段的索引:A、A+、... 我想将这些值作为整数映射到子字段中,以便对其应用衰减函数。 示例:
rating: A
rating.value: 1
我只是想根据我的要求在这里检查什么是最明智的方法。 据我了解,可以做到或者
谢谢您的帮助
感谢您提出了一个经过充分研究的问题。事实上,在许多情况下这些都是可行的解决方案。但是,在您的情况下,分析器方法将生成一个文本值,这需要在运行时进行转换。管道将向源添加一个附加字段,这可能需要也可能不需要(浪费空间,但可能会加速重新索引)。
还有一个选项将其实现为运行时字段。
但我最喜欢的可能是通过映射中的脚本生成它:
PUT test
{
"mappings": {
"properties": {
"rating": {
"type": "keyword"
},
"rating_value": {
"type": "long",
"script": """
def ratings = ['F', 'E', 'D', 'C-', 'C', 'C+', 'C++', 'B-', 'B', 'B+', 'B++', 'A-', 'A', 'A+', 'A++'];
emit(ratings.indexOf(doc['rating'].value))
"""
}
}
}
}
PUT test/_bulk?refresh
{"index": {}}
{"rating": "D"}
{"index": {}}
{"rating": "A++"}
{"index": {}}
{"rating": "B"}
{"index": {}}
{"rating": "B-"}
{"index": {}}
{"rating": "who knows"}
GET test/_search
{
"sort": [
{
"rating_value": {
"order": "desc"
}
}
]
}