elasticsearch:嵌套值的有效排序

5t7ly7z5  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(368)

我正在根据嵌套键/值结构中的值计算对elasticsearch(5.1.1)的结果进行排序。
分拣必须:
跨多个嵌套结构从给定键中查找值
将这些值相乘
将此乘法用作排序的分数
我目前所做的工作正在进行中,但速度很慢/效率很低。我已经做了一个无痛脚本,由于计算在#2以上。我要做的是:
循环遍历所有键以找到它们各自的匹配值
对于第一个匹配,将值保存在变量中;对于后续匹配,将保存的值与当前值相乘,并将其保存在前面提到的变量中
我认为效率低下的原因是:
循环遍历所有嵌套项(每个文档有很多项,并且有许多文档)
我正在使用 params['_source'] 有减缓事态发展的名声。好吧,我得用 params['_source'] 在painless中处理嵌套值
现在来问一个问题:我怎样才能更有效地解决这个问题?我是完全走错了路,还是有什么办法不用 params['_source'] ?
我的Map(嵌套结构是 "my_ratios" ):

{
  "my_index": {
    "mappings": {
      "my_type": {
        "properties": {
          "a_value": {
            "type": "long"
          },
          "my_ratios": {
            "type": "nested",
            "properties": {
              "Key": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              },
              "Value": {
                "type": "float"
              }
            }
          }
        }
      }
    }
  }
}

嵌套键/值结构示例:

{
  {
    "Key": "Key1",
    "Value": 0.4898
  },
  {
    "Key": "Key2",
    "Value": 0.14286
  },
  {
    "Key": "Key3",
    "Value": 6.12245
  },
  ...
}
dw1jzc5e

dw1jzc5e1#

恐怕你唯一的选择是要么重新设计你的数据,要么复制一份相关的数据结构以供你整理。
据我所知,elasticsearch从未打算在 params['_source'] ,并且您确实需要—正如您所指出的—使用它从无痛数据库访问嵌套对象。换句话说,elasticsearch在对嵌套对象执行自定义操作时效率不高。
确保在满足需求后立即退出循环,以避免不必要的迭代—如果您还没有这样做,这可能会带来一些改进。

相关问题