Elasticsearch学习---Term query和Match query

前言

在Elasticsearch中Term query和Match query都可以用来对文档中的数据进行检索,但是在检索结果上会稍有不同,本文通过案例对两者的差异进行说明。

数据准备

建立一个索引,指定mapping结构,其中name是keyword类型,full_name是text类型。

PUT /my-index-01
{
  "mappings": {
    "properties": {
      "name":{
        "type": "keyword"
      },
      "full_name":{
        "type": "text"
      }
    }
  }
}

插入一条文档数据。

PUT /my-index-01/_doc/1
{
  "name":"zhang",
  "full_name":"zhang san"
}

查询测试

使用match进行如下查询,可以查到结果

GET /my-index-01/_search
{
  "query": {
    "match": {
      "full_name": "zhang san"
    }
  }
}

在这里插入图片描述

而如果换成term查询,则查不到

GET /my-index-01/_search
{
  "query": {
    "term": {
      "full_name": {
        "value": "zhang san"
      }
    }
  }
}

在这里插入图片描述

如果换成只查zhang或者san,则两者都可以查到

GET /my-index-01/_search
{
  "query": {
    "match": {
      "full_name": "zhang"
    }
  }
}

GET /my-index-01/_search
{
  "query": {
    "term": {
      "full_name": {
        "value": "zhang"
      }
    }
  }
}

同样如果换成查询name字段,则两者也都可以查到

GET /my-index-01/_search
{
  "query": {
    "match": {
      "name": "zhang"
    }
  }
}

GET /my-index-01/_search
{
  "query": {
    "term": {
      "name": {
        "value": "zhang"
      }
    }
  }
}

Term query

返回字段中包含确切 term 的文档,你可以通过term查询来进行精确匹配。

官方,建议不要对text类型的字段进行term查询,因为默认情况下text类型的字段会被进行分词,这样就让使用term查询变得困难,推荐对text字段进出查询,使用match query。

可以看出term query在查询时并不会进行分词,所以在上面案例中,由于标准分词器会对full_name字段进行分词,zhang san会被分成zhang和san。

查看在standard分词器下,zhang san的分词结果

POST _analyze
{
  "analyzer": "standard",
  "text": "zhang san"
}

在这里插入图片描述

因此当你通过term查询zhang或者san时,可以查询到数据,因为词项表中能找到对应的内容,而如果通过zhang san进行查询时,则查不到内容,因为zhang san并没有在词项表中。

Match query

match query是对查询内容进行分词,然后使用全文搜索的标准查询,所以很明显,如果你输入zhang san进行查询,会对zhang和san两个词项分别进行匹配,只要有一个匹配到了,就会返回其结果。

总结

term query:会直接按照查询内容进行精确匹配,如果分词表中能查到对应的结果则返回。
match query:会对查询的内容先进行分词,然后按照分词的结果与分词表进行匹配,只要有一个匹配到就算匹配成功。
可以这样理解,以分词为查询单位来看,term是精确匹配,而match是模糊匹配。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码拉松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值