【发布时间】:2019-05-29 00:15:44
【问题描述】:
我正在根据嵌套键/值结构中的值计算对来自 Elasticsearch (5.1.1) 的结果进行排序。
排序必须:
- 从多个嵌套结构中的给定键中查找值
- 将这些值相乘
- 将此乘法用作排序分数
我目前正在工作,但它真的很慢/效率低下。由于上面#2中的计算,我制作了一个无痛脚本。我正在做的是:
- 遍历所有键以找到它们各自的匹配值
- 对于第一次匹配,将值保存在变量中;对于后续匹配,将保存的值与当前值相乘,并将其保存在上述变量中
我认为效率低下的原因是:
- 循环遍历所有嵌套项(每个文档有很多,并且有很多文档)
- 我正在使用
params['_source'],它以减慢速度着称。 AFAIK,我必须使用params['_source']来解决 Painless 中的嵌套值
现在的问题是:我怎样才能更有效地解决这个问题?我是完全走错了路,还是有办法不使用params['_source']?
我的映射(嵌套结构是"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
},
...
}
【问题讨论】:
标签: elasticsearch elasticsearch-painless