我正在基于嵌套键/值结构中的值计算对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
},
...
}
答案 0 :(得分:1)
恐怕您唯一的选择是重新建模数据,或仅提供相关数据结构的副本以用于排序。
据我所知,Elasticsearch从来没有打算在params['_source']
上高效,并且-正如您所指出的-您确实需要使用它来从Painless访问嵌套对象。换句话说,当对嵌套对象执行自定义操作时,Elasticsearch效率不高。
请确保在满足要求后立即退出循环,以避免不必要的迭代-如果您尚未这样做,则可以带来一些改进。