elasticsearch 查询 match term

  • match
  • match_phrase(slop)
  • multi_match(best_fields、most_fields、cross_fields)

** match **

{
  "query": {
      "match": {
         "text": "你好"
      }
   }
}

会进行分词,并根据minimal_should_match控制匹配程度,然后根据Lucene的评分机制进行评分

** match_phrase **
会进行分词,然后精确匹配每一个分词分出来的token。

{
  "query": {
    "match_phrase": {
        "content" : "我的宝马多少马力"
    }
  }
}

在使用match_phrase时,可以通过slop参数来控制匹配程度,当slop=1时,表示少匹配一个也满足。

{
  "query": {
    "match_phrase": {
        "content" : {
            "query" : "我的宝马多少马力",
            "slop" : 1
        }
    }
  }
}

** multi_match **
匹配多个字段,"fields" : ["title", "content"],表示title,content两个字段。

{
  "query": {
    "multi_match": {
        "query" : "我的宝马多少马力",
        "fields" : ["title", "content"]
    }
  }
}

当使用multi_match的时候,可以使用best_fields来控制匹配程度,即评分,例如

{
  "query": {
    "multi_match": {
      "query": "我的宝马发动机多少",
      "type": "best_fields",
      "fields": [
        "tag",
        "content"
      ],
      "tie_breaker": 0.3
    }
  }
}

意思就是完全匹配"宝马 发动机"的文档评分会比较靠前,如果只匹配宝马的文档评分乘以0.3的系数。

most_fields是另一种控制评分的形式

{
  "query": {
    "multi_match": {
      "query": "我的宝马发动机多少",
      "type": "most_fields",
      "fields": [
        "tag",
        "content"
      ]
    }
  }
}

你可能感兴趣的:(elasticsearch 查询 match term)