Elasticsearch通配符并根据查询的精确程度对其进行排序

时间:2015-05-24 04:46:34

标签: elasticsearch

我有这样的文件

[{ name : 'Mark'}, { name : 'Aaron Mark'}, { name : 'Jane'}, { name : 'Mary'}, {'Mark Joseph'}]

每次我对名称进行通配符搜索:' Mar *"它总是返回

[{ name : 'Mark'}, {name : 'Aaron Mark'}, { name : 'Mary'}, {name :'Mark Joseph'}]

但我想要的结果是这样的

[{name : 'Mark'}, {name:'Mark Joseph'}, {name:'Mary'}, {name:'Aaron Mark'}]

由于

1 个答案:

答案 0 :(得分:1)

您可以尝试下面的查询组合以获得所需的订单

"bool": {
    "should": [
        {
            "wildcard": {
                "name": {
                    "value": "*Mar*"
                }
            }
        },
        {
            "prefix": {
                "name": {
                    "value": "Mar*",
                    "boost": 2
                }
            }
        },           
        {
            "term": {
                "name": {
                    "value": "Mar",
                    "boost": 4
                }
            }
        }

    ]
}

这可能不完全给出结果,因为你指定'coz“Mar *”无法区分“Mark”和“Mary”。但它是为了让你了解可以做些什么。