Elasticsearch:获得完全匹配,然后模糊

时间:2018-09-12 13:22:50

标签: elasticsearch kibana

我运行以下查询:

GET /thing/_search/?
{
  "query": {
    "multi_match" : {
      "query":      "castle pontivy",
      "type":       "most_fields",
      "fields":     [ "title", "loc" ]
    }
  }
}

它工作并返回thing的结果,其中titleloc包含castle和/或pontivy的相关顺序。很好。

现在,我想继续这样查询,但是我也希望结果更喜欢title上的完全匹配。这意味着,如果一个项目的标题与castle pontivy完全匹配,则必须将其作为第一个元素返回(然后将其他结果照常处理)。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以进行phrase匹配并将其boost设置为5,因此无论默认分数是多少,它都将加上+5。如果您想获得更多分数,请查看function score query(我建议您这样做)

第二个multi_match将使用most_fields匹配其余文档。

{  
  "query":{  
    "bool":{  
      "should":[  
        {  
          "multi_match":{  
            "query":"castle pontivy",
            "type":"phrase",
            "fields":[  
              "title",
              "loc"
            ],
            "boost":5
          }
        },
        {  
          "multi_match":{  
            "query":"castle pontivy",
            "type":"most_fields",
            "fields":[  
              "title",
              "loc"
            ]
          }
        }
      ]
    }
  }
}