【问题标题】:Elasticsearch Painless script get nested field by value?Elasticsearch Painless 脚本按值获取嵌套字段?
【发布时间】:2017-05-11 13:52:07
【问题描述】:

我想根据嵌套字段值计算我在 elasticsearch 上的查询得分。这是我的文档示例:

{
  "title": "Mr",
  "first_name": "Barry",
  "last_name": "White",
  "experiences": [
     {
       "name": "parachute",
       "values": {
           "last_year": 4,
           "older": 12
       }
    },
    {
       "name": "base jump",
       "values": {
           "last_year": 2,
           "older": 1
       }
    }
   ]
}

我想要的是根据经验数量和范围对查询进行过滤和排名(去年的值更重要)。问题是:如何获得过滤后的经验值?

这是我的查询的简化版本:

{
"query" :{
    "nested": {
        "path": "experiences",
        "query":{
            "function_score" : {
                "functions": [
                    {
                        "filter": {"term": { "experiences.name": "parachute"} },
                        "script_score" : {
                            "script" : {
                              "lang": "painless",
                              "inline": "_score * doc['experiences.values.older'].value" //Here I want to get the "older" value of "parachute": 12
                            }
                        }
                    }
                ]
             }

        }
    }
}
}

希望有办法解决这个问题...

提前感谢您的帮助

【问题讨论】:

    标签: elasticsearch elasticsearch-painless


    【解决方案1】:

    感谢官方 elasticsearch IRC 频道的帮助,我终于设法解决了这个问题。我不得不稍微改变一下文档映射:

    • 删除“值”
    • 将“last_year”和“older”设置为每个体验的根值

    就是这样。所以这是最终的查询:

    {
        "query" :{
            "nested": {
                "path": "experiences",
                "query":{
                    "function_score" : {
                        "query":{
                            "term": { "experiences.name": "parachute"}
                        },
                        "functions": [
                            {
                                "field_value_factor": {
                                    "field": "experiences.older",
                                    "factor": 1,
                                    "missing": 1
                                }
                            },{
                                "field_value_factor": {
                                    "field": "experiences.last_year",
                                    "factor": 2,
                                    "missing": 1
    
                                }
                            }
                        ],
                        "score_mode": "sum"
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多