按ElasticSearch中数字字段的距离排序

Mar*_*ers 4 elasticsearch

对于项目,我需要选择过滤器范围内和最接近数值的文档.这是一个价格,我似乎无法找到这是否可能.

说我有2个文件:

{
    "name": "Document1",
    "price": 46.12,
    "tags": ["tag1", "tag2"]
}
{
    "name": "Document2",
    "price": 82.29,
    "tags": ["tag1", "tag3"]
}    
Run Code Online (Sandbox Code Playgroud)

是否有可能获得最接近66.23的价格的文件?

Mar*_*ers 5

答案(感谢keety)是启用动态脚本并添加这样的排序方法:

{
    "query": {
        "filtered" : {
            "query":{
                "match_all" : { }
            },
            "filter": {}
        }
    },
    "sort" : {
        "_script" : {
            "script" : "cur = (factor - doc['age'].value); if (cur < 0) { cur = cur * -1 } else { cur = cur}",
            "type" : "number",
            "params" : {
                "factor" : 45
            },
            "order" : "asc"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这种从最近到最远的分类,就像一个魅力.谢谢!