Elasticsearch:如何将关键字映射到子字段中的离散值?

问题描述 投票:0回答:1

我有一个带有表达评级的关键字字段的索引:A、A+、... 我想将这些值作为整数映射到子字段中,以便对其应用衰减函数。 示例:

rating: A
rating.value: 1

我只是想根据我的要求在这里检查什么是最明智的方法。 据我了解,可以做到或者

谢谢您的帮助

elasticsearch elastic-stack
1个回答
0
投票

感谢您提出了一个经过充分研究的问题。事实上,在许多情况下这些都是可行的解决方案。但是,在您的情况下,分析器方法将生成一个文本值,这需要在运行时进行转换。管道将向源添加一个附加字段,这可能需要也可能不需要(浪费空间,但可能会加速重新索引)。

还有一个选项将其实现为运行时字段

但我最喜欢的可能是通过映射中的脚本生成它:

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"
      }
    }
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.