ElasticSearch中的映射(mapping)

news/2024/7/7 18:48:21

        前面博客中创建的索引以及插入数据,都是由Elasticsearch进行自动判断类型,有些时候是需要进行明确字段类型的,否则,自动判断的类型和实际需求有时候是不相符的。

自动判断的规则如下:

JSON typeField type
Boolean: true or false"boolean"
Whole number: 123"long"
Floating point: 123.45"double"
String, valid date: "2014-09-15""date"
String: "foo bar""string"

Elasticsearch中支持的类型如下:

类型表示的数据类型
Stringstring , text , keyword
Whole numberbyte , short , integer , long
Floating pointfloat , double
Booleanboolean
Datedate

注意:

  • string类型在ElasticSearch 旧版本中使用较多,从ElasticSearch 5.x开始不再支持string,由text和 keyword类型替代。
  • text 类型,当一个字段是要被全文搜索的,比如Email内容、产品描述,应该使用text类型。设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。
  • keyword类型适用于索引结构化的字段,比如email地址、主机名、状态码和标签。如果字段需要进行过滤(比如查找已发布博客中status属性为published的文章)、排序、聚合。keyword类型的字段只能通过精确值搜索到。

创建明确类型的索引:

PUT /study
# 请求数据
{"settings": {"index": {"number_of_shards": "2","number_of_replicas": "0"}},"mappings": {"properties": {"name": {"type": "text"},"age": {"type": "integer"},"mail": {"type": "keyword"},"hobby": {"type": "text"}}}
}# 响应数据
{"acknowledged": true,"shards_acknowledged": true,"index": "study"
}

这儿可能存在的错误,参考博文:ElasticSearch 7.x 报错:Root mapping definition has unsupported parameters_Sunny Feng的博客-CSDN博客

查看映射:

GET /study/_mapping# 响应数据
{"study": {"mappings": {"properties": {"age": {"type": "integer"},"hobby": {"type": "text"},"mail": {"type": "keyword"},"name": {"type": "text"}}}}
}

插入数据:

POST  /study/_bulk
# 请求数据
{"index":{"_index":"study"}} 
{"name":"张三","age": 20,"mail": "111@qq.com","hobby":"羽毛球、乒乓球、足球"} 
{"index":{"_index":"study"}} 
{"name":"李四","age": 21,"mail": "222@qq.com","hobby":"羽毛球、乒乓球、足球、篮球"} 
{"index":{"_index":"study"}} 
{"name":"王五","age": 22,"mail": "333@qq.com","hobby":"羽毛球、篮球、游泳、听音乐"} 
{"index":{"_index":"study"}} 
{"name":"赵六","age": 23,"mail": "444@qq.com","hobby":"跑步、游泳"} 
{"index":{"_index":"study"}} 
{"name":"孙七","age": 24,"mail": "555@qq.com","hobby":"听音乐、看电影"}# 响应结果
{"took": 25,"errors": false,"items": [{"index": {"_index": "study","_type": "_doc","_id": "SHjOVIIBpyNh4YQ4CVSN","_version": 1,"result": "created","_shards": {"total": 1,"successful": 1,"failed": 0},"_seq_no": 0,"_primary_term": 1,"status": 201}},{"index": {"_index": "study","_type": "_doc","_id": "SXjOVIIBpyNh4YQ4CVSN","_version": 1,"result": "created","_shards": {"total": 1,"successful": 1,"failed": 0},"_seq_no": 0,"_primary_term": 1,"status": 201}},{"index": {"_index": "study","_type": "_doc","_id": "SnjOVIIBpyNh4YQ4CVSN","_version": 1,"result": "created","_shards": {"total": 1,"successful": 1,"failed": 0},"_seq_no": 1,"_primary_term": 1,"status": 201}},{"index": {"_index": "study","_type": "_doc","_id": "S3jOVIIBpyNh4YQ4CVSN","_version": 1,"result": "created","_shards": {"total": 1,"successful": 1,"failed": 0},"_seq_no": 1,"_primary_term": 1,"status": 201}},{"index": {"_index": "study","_type": "_doc","_id": "THjOVIIBpyNh4YQ4CVSN","_version": 1,"result": "created","_shards": {"total": 1,"successful": 1,"failed": 0},"_seq_no": 2,"_primary_term": 1,"status": 201}}]
}

注意:通过上面的数据库中数据可以看到,默认生成的是_doc类型的数据。

测试搜索:

POST /study/_search# 请求数据
{"query": {"match": {"hobby": "音乐"}}
}# 响应数据
{"took": 2,"timed_out": false,"_shards": {"total": 2,"successful": 2,"skipped": 0,"failed": 0},"hits": {"total": {"value": 2,"relation": "eq"},"max_score": 1.0470967,"hits": [{"_index": "study","_type": "_doc","_id": "THjOVIIBpyNh4YQ4CVSN","_score": 1.0470967,"_source": {"name": "孙七","age": 24,"mail": "555@qq.com","hobby": "听音乐、看电影"}},{"_index": "study","_type": "_doc","_id": "SnjOVIIBpyNh4YQ4CVSN","_score": 0.8527901,"_source": {"name": "王五","age": 22,"mail": "333@qq.com","hobby": "羽毛球、篮球、游泳、听音乐"}}]}
}


http://lihuaxi.xjx100.cn/news/260085.html

相关文章

Pytorch提取参数及自定义初始化

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达作者丨李元芳知乎(已授权)来源丨https://zhuanlan.zhihu.com/p/52297770编辑丨极市平台导读 有时候提取出的层结构并不够,还需要对里面的…

jdk1.8

最好不要改变安装路径转载于:https://www.cnblogs.com/jcfxl/p/7552080.html

Java 8 开发的 4 大技巧

欢迎关注方志朋的博客,回复”666“获面试宝典Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等。对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates功能。刚开始觉得它只是…

程序的编译、链接和执行

参考:程序的编译、链接和执行 - 知乎 处理C语言程序: 预处理、编译、汇编、链接、加载 预处理(Preprocessing) 翻译一段 C 语言程序的第一步是预处理。这一步主要处理所有以“#”号开头的行。比如当我们遇到 #include "he…

重磅!深度学习知识总结和调参技巧开放下载了

近年来,人工智能正在进入一个蓬勃发展的新时期,这主要得益于深度学习和CV领域近年来的发展和成就。在这其中,卷积神经网络的成功也带动了更多学术和商业应用的发展和进步。为了避免“内卷”,更多人选择学习进阶,但是仍…

强化学习,路在何方?

↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习,不错过Datawhale干货 来源:DeepRL实验室,转自:睿慕课▌一、深度强化学习的泡沫2015年,DeepMind的Volodymyr Mnih等研究员在《自然》杂志上发表论文…

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

term查询 term 主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型): { "term": { "age": 26 }} { "term": { "date": "2014-09-01&q…

Quartz定时任务学习(四)调度器

org.quartz.Scheduler 类层次 作为一个 Quartz 用户,你要与实现了 org.quartz.Scheduler 接口的类交互。在你调用它的任何 API 之前,你需要知道如何创建一个 Scheduler 的实例。取而代之的是用了某个工厂方法来确保了构造出 Sheduler 实例并正确的得到初…