如何从Elasticsearch Painless脚本访问术语位置/偏移量?

时间:2017-02-21 23:40:35

标签: elasticsearch

我们使用AWS Elasticsearch,它支持从版本5开始的无痛脚本。 我需要在自定义分数脚本中访问term positions/offsets

在旧的Groovy脚本中,它起作用了:

"query": {
    "function_score": {
        "query": {"match_phrase": {"text": "life"} },
        "script_score": {
            "script": {
                "lang": "groovy",
                "inline": "termInfo=_index['text'].get('life', _POSITIONS);"
            }
        },
        "boost_mode": "multiply"
    }
}

但它不适用于Painless。它返回'编译错误'。

1 个答案:

答案 0 :(得分:1)

我希望这会有所帮助,我希望根据文档中查询文本的位置获得分数

{
    "query": {
        "bool": {
            "should": [
                {
                    "function_score": {
                        "query": {
                            "match_phrase_prefix": {
                                "field": "query"
                            }
                        },
                        "script_score": {
                            "script": {
                                "lang": "painless",
                                "source": "(params['_source']['field'].toLowerCase().indexOf('query'.toLowerCase())+1)"
                            }
                        },
                        "boost_mode": "max"
                    }
                }
            ]
        }
    }
}