elasticsearch通配符并按查询的精确程度对其排序

laik7k3q  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(342)

我有一份这样的文件 [{ name : 'Mark'}, { name : 'Aaron Mark'}, { name : 'Jane'}, { name : 'Mary'}, {'Mark Joseph'}] 每次我对name进行通配符搜索:“mar*”时,它总是返回这个 [{ name : 'Mark'}, {name : 'Aaron Mark'}, { name : 'Mary'}, {name :'Mark Joseph'}] 但我想要的结果是这样的 [{name : 'Mark'}, {name:'Mark Joseph'}, {name:'Mary'}, {name:'Aaron Mark'}] 谢谢

5m1hhzi4

5m1hhzi41#

您可以尝试下面的查询组合来获得所需的顺序

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

    ]
}

由于“mar*”无法区分“mark”和“mary”,因此这可能无法准确给出您指定的结果。但它是给你一个关于可以做什么的想法。

相关问题