如何基于字段值提升弹性搜索结果

时间:2015-08-27 21:13:22

标签: elasticsearch

我使用查询字符串查询弹性搜索,下面是我的示例查询。

{
    "query_string" : {
        "query" : "Sharmila"
    }
}

我在文件中称为FLAG字段。如果FLAG == Y,我想提高结果。由于不推荐使用custom_score,我想使用function_score

{
"query": {
    "function_score": {
        "query": {
            "query_string": {
                "query": "Sharmila"
            },
            "functions": [{
                "script_score": {
                    "script": "_score * (doc['FLAG'].value == 'Y' ? 1.2 : 1)"
                }
            }],
        }
    }
}
}

我正在异常说没有为[script_score]注册查询]

我正在使用elasticsearch 1.2.2

我在做错的任何想法?

1 个答案:

答案 0 :(得分:1)

你几乎就在那里,你只需要将functions属性移到function_score之下,而不是将其埋在query内:

{
"query": {
    "function_score": {
        "functions": [{
            "script_score": {
                "script": "_score * (doc['FLAG'].value == 'Y' ? 1.2 : 1)"
            }
        }],
        "query": {
            "query_string": {
                "query": "Sharmila"
            }
        }
    }
}
}