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