script_score 查询不支持 [source]

script_score query does not support [source]

我正在使用 Elasticsearch OSS (docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.4) 的官方 Docker 图像,但似乎 script_score 根本无法工作。似乎未启用脚本。

例如,这个:

POST http://localhost:9200/address/address/_search

{
    "query": {
        "function_score": {
            "query": {
                "match": {
                    "fullAddress": {
                        "query": "13 fake",
                        "operator": "and"
                    }
                }
            },
            "script_score": {
                "lang": "expression",
                "source": "doc['flatNumber'].length"
            }
        }
    }
}

给我这个:

{
    "error": {
        "root_cause": [
            {
                "type": "parsing_exception",
                "reason": "script_score query does not support [source]",
                "line": 13,
                "col": 15
            }
        ],
        "type": "parsing_exception",
        "reason": "script_score query does not support [source]",
        "line": 13,
        "col": 15
    },
    "status": 400
}

我尝试启用它:

PUT http://localhost:9200/_cluster/settings

{
    "persistent": {
        "script.engine.groovy.inline.aggs": "on"
    }
}

但无济于事:

{
    "error": {
        "root_cause": [
            {
                "type": "illegal_argument_exception",
                "reason": "persistent setting [script.engine.groovy.inline.aggs], not recognized"
            }
        ],
        "type": "illegal_argument_exception",
        "reason": "persistent setting [script.engine.groovy.inline.aggs], not recognized"
    },
    "status": 400
}

如何让 script_score 工作?

您只是在 script_score 中遗漏了一个 script 部分。像这样修改它就可以了:

    "script_score": {
        "script": {
            "lang": "expression",
            "source": "doc['flatNumber'].length"
        }
    }