ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

一、text字段和keyword字段的区别

在了解这些查询之前的区别之前,先了解一下text字段和keyword字段的区别:

  • 创建索引和类型,引入keyword字段
PUT my_index
{
  "mappings": {
    "properties": {
      "name":{
        "type": "keyword"
      }
    }
  }
}
GET /my_index
可以看到已经创建好了,字段的类型是keyword

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

默认的索引类型就是_doc
ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

添加一条数据

POST /my_index/_doc/1
{
  "name":"first test"
}

然后查询

GET /my_index/_search
{
  "query": {
    "term": {
      "name":"first"
    }
  }
}

GET /my_index/_search
{
  "query": {
    "term": {
      "name":"test"
    }
  }
}

可以看到没有查到任何数据
ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

然后查询

GET /my_index/_search
{
  "query": {
    "term": {
      "name": "first test"
    }
  }
}

可以看到匹配到了数据
ElasticSearch 中 match、match_phrase、query_string 和 term 的区别
所以将字段设置为keyword,查询的时候已有的值不会被分词

  • 现在添加一个text类型的字段
PUT /my_index/_mapping
{
  "properties":{
    "tag":{
      "type":"text"
    }
  }
}

GET /my_index

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别
往之前已经创建的doc之中添加tag的数据:

POST /my_index/_doc/1
{
  "name":"first test",
  "tag":"second test"
}

或者使用
(推荐)
POST /my_index/_doc/1/_update
{
  "doc":{
    "tag":"second test"
  }
}

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

可以看到数据已经进去了
ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

然后对tag字段进行查询:

POST /my_index/_search
{
  "query": {
    "term": {
      "tag": "second"
    }
  }
}

POST /my_index/_search
{
  "query": {
    "term": {
      "tag": "test"
    }
  }
}

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别
现在输入全部的查询:

POST /my_index/_search
{
  "query": {
    "term": {
      "tag": "second test"
    }
  }
}

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别
说明text类型的字段会被分词,查询的时候如果使用拆开查可以查到,但是要直接使用全部查询,就查不到。
注意:”1, 2”会被拆分为[1,2],但是”1,2”是不会被拆分的,因为之间少了个空格。

二、match和term的区别

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

1、term

1)、term查询keyword字段

term不会分词,而keyword字段也不分词。需要完全匹配才可以

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

但是如果分词查询,会无法匹配到对应的数据

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

2)、term查询keyword字段

因为text字段会分词,而term不会分词,所以term查询条件必须是text字段分词后的某一个

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别
如果是输入全部查询:

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别
或者部分输入
ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

查询失败,因为现在的tag已经被分词了,存储是[listen,to,music]

2、match查询text字段

match分词,text也分词,只要match的分词结果和text的分词结果有相同就匹配

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别
成功。如果都不相同就失败了。

3、match_phrase

1)、match_phrase匹配keyword字段

match_phrase会被分词,而keyword不会被分词,match_phrase的需要和keyword完全匹配才可以
ElasticSearch 中 match、match_phrase、query_string 和 term 的区别
只有这种情况才是成功的

2)match_phrase匹配text字段

match_phrase是分词的,text也是分词的。match_phrase的分词结果必须再text字段分词中都包含,而且顺序必须相同,而且必须都是连续的

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

如果不是连续的,就会失败

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

4、query_string

1)query_string查询key类型的字段,必须是全部匹配

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

2)query_string查询text类型的字段

和match_phrase区别的是,query_string查询text类型字段,不需要连续,顺序还可以调换

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

ElasticSearch 中 match、match_phrase、query_string 和 term 的区别

本作品采用 《CC 协议》,转载必须注明作者和本文链接
HuDu
2 人点赞
讨论数量: 3
小小海

写的很棒学习了

3年前 评论
HuDu (楼主) 3年前
PotatoSmith

很棒

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
HuDu
未填写
文章
247
粉丝
18
喜欢
219
收藏
63
排名:722
访问:9993
私信
所有博文
博客标签
redis
7
gateway
1
rabbitmq
19
javascript
1
css
1
elasticsearch
5
html
1
ftp
1
docker
15
mysql
16
console
1
git
2
vue
2
shell
1
kafka
2
oss
4
mybatis
11
KVM
1
RDB
1
idea
1
vim
1
sublime
1
macos
3
yum
1
minio
6
分布式锁
3
分布式事务
1
二叉树
1
正则表达式
3
frp
1
Charles
1
内网穿透
1
maven
2
iTerm
1
python
1
SpringMVC
4
JVM
2
JMM
1
对象存储
3
linux
2
canal
1
MybatisPlus
1
nginx
1
springcloud
16
easyexcel
1
kubernetes
8
生产者
1
线程池
5
seata
2
threadlocal
1
AOF
1
redisson
2
zookeeper
3
社区赞助商
成为赞助商

玻璃钢生产厂家上海市玻璃钢雕塑报价沅江玻璃钢仿铜雕塑云南创意玻璃钢雕塑公园玻璃钢雕塑造型玻璃钢运动造型雕塑定做海东玻璃钢雕塑设计广东玻璃钢泡沫雕塑张掖玻璃钢卡通雕塑定做福建玻璃钢雕塑摆件设计仿真玻璃钢雕塑小龙虾模型挂件宜昌人物玻璃钢雕塑广州大型玻璃钢雕塑西宁仿真玻璃钢雕塑设计西安多彩玻璃钢雕塑生产厂家玻璃钢马雕塑哪家好光泽玻璃钢花盆花器福州玻璃钢仿真雕塑咸阳玻璃钢雕塑价格厂家玻璃钢荷叶雕塑壁挂肖像玻璃钢雕塑价格佛像彩绘玻璃钢雕塑价格新余公园玻璃钢雕塑沈阳商场美陈装饰设计定西城市玻璃钢雕塑定做河南走廊商场美陈市场报价潜江玻璃钢雕塑摆件批发平湖玻璃钢雕塑服务热线湖州玻璃钢人物雕塑厂家供应商场美陈思考玻璃钢动物雕塑超低价香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化