elasticsearch简单入门语法

基本操作

创建不同的分词器

ik_smart: 极简分词 ; ik_max_word: 最细力再度分词

基本的rest命令

methodurl地址描述
PUTlocalhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)
POSTlocalhost:9200/索引名称/类型名称创建文档(随机文档id)
POSTlocalhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETElocalhost:9200/索引名称/类型名称/文档id删除文档
GETlocalhost:9200/索引名称/类型名称/文档id查询文档通过文档id
POSTlocalhost:9200/索引名称/类型名称/_search查询所有数据

索引基本操作

查询所有索引

Elasticsearch 7.x 版本

# 返回一个仅包含索引名称的 JSON 数组  

GET /_cat/indices?format=json&h=index

扩展:获取ES的其他信息

GET _cat/health      # 查看健康值  

GET _cat/indices?v  #查看所有东西的版本信息

新增索引

 # ElasticSearch的7.x.x版本PUT /索引名/类型名/文档id{请求体}

 # 创建索引
 

 PUT test1{"mappings": {"properties": {"name": {"type": "text"},"age":{"type": "integer"}}}}
 # 创建加索引时同时添加数据,es会自动给属性设置type# ElasticSearch的8.x.x版本,类型已经弃用,默认写_doc。PUT /索引名/_doc/文档id{请求体}​PUT test1/_doc/1{"name":"小明","age":23} # ElasticSearch的8.x.x版本,类型已经弃用,默认写_doc。PUT /索引名/_doc/文档id{请求体}
 CreateIndexRequest request = new CreateIndexRequest(INDEX);CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);

查看索引

name需要指定类型

官网类型文档地址:Keyword type family | Elasticsearch Guide [8.9] | Elastic

  • 字符串类型 text、keyword

  • 数值类型 long,integer,short,byte,double,float,half float,scaled float

  • 日期类型 date

  • te布尔值类型 boolean·

  • 二进制类型 binary

  • 等等……

设置字段类型

修改索引

索引是不可修改的。一旦创建了索引,您不能直接修改其结构或字段的映射。如果要修改索引的结构,您需要重新创建索引并重新索引数据。

 POST _reindex{"source": {"index": "your_old_index"},"dest": {"index": "new_index"}}

新索引和旧索引的字段不一定需要完全一致。在重新创建索引和重新索引数据时,可以对字段进行修改、删除或添加新的字段。

如果字段在新索引中已经存在,则该字段的映射将被保留。如果字段在新索引中不存在,则会根据重新索引的数据动态创建字段的映射。

例如,假设旧索引中有一个 "field1" 字段,而新索引中没有。在重新索引数据时,如果数据中存在 "field1" 字段,Elasticsearch 将自动创建该字段的映射并将其添加到新索引中。

同样地,如果旧索引中存在一个 "field2" 字段,而新索引中也有一个名为 "field2" 的字段,那么在重新索引数据时,新索引中的 "field2" 字段的映射将保留不变。

需要注意的是,如果字段在新索引和旧索引中具有不兼容的类型或映射定义,可能会导致数据转换或丢失。因此,在进行索引结构修改时,请确保对数据和字段映射的变化有充分的了解和计划。

删除索引

关于文档的基本操作

基本操作

添加数据

PUT /index/_doc/1
{"name": "狂神说","age": 3,"desc": "工资2500","tags": ["直男","温暖","技术宅"]
}
PUT /index/_doc/2
{"name": "张三","age": 30,"desc": "没有工资","tags": ["渣男","旅游","交友"]
}

查询数据

# 查询索引下,对应文档ID的数据
GET /index/_doc/1
GET /index/_doc/2

更新 PUT(不推荐)

PUT 修改数据,需要全属性字段都存在,否则会丢失缺失的属性字段

# 修改数据
put index/_doc/1
{"name": "杨光1","age": 3,"desc": "工资2500","tags": ["直男","温暖","技术宅"]
}
# PUT 修改时,会更新该ID下的所有字段,如果缺失字段,则会删除原有字段
put index/_doc/1
{"name": "杨光1","age": 3,"desc": "工资2500"
}

更新 POST(推荐)

# POST 更新,会修改该文档ID下对应属性的值
POST index/_update/1
{"doc": {"name":"杨光3"}
}
 
# POST 更新,会修改该文档ID下对应属性的值,不推荐这样写,ES8执行不支持这种语法
POST index/_doc/1/_update
{"doc": {"name":"杨光4"}
}

 

条件查询

PUT /index/_doc/1
{"name": "杨光","age": 3,"desc": "工资2500","tags": ["直男","温暖","技术宅"]
}PUT /index/_doc/2
{"name": "张三","age": 30,"desc": "没有工资","tags": ["渣男","旅游","交友"]
}# 根据name查询
GET index/_search?q=name:张三

PUT index
{"mappings": {"properties": {"name":{"type": "keyword"},"xm":{"type": "text","analyzer": "ik_smart"},"age":{"type": "integer"},"desc":{"type": "text"},"tags":{"type": "text"}}}
}
# 测试数据
PUT /index/_doc/1
{"name": "杨光","xm": "杨光","age": 3,"desc": "工资2500","tags": ["直男","温暖","技术宅"]
}PUT /index/_doc/2
{"name": "张三","xm": "张三","age": 30,"desc": "没有工资","tags": ["渣男","旅游","交友"]
}PUT /index/_doc/3
{"name": "李三","xm": "李三","age": 23,"desc": "工资5000","tags": ["健身","旅游","购物"]
}PUT /index/_doc/4
{"name": "张三丰","xm": "张三丰","age": 10,"desc": "工资5000","tags": ["健身","旅游","购物"]
}PUT /index/_doc/5
{"name": "张","xm": "张","age": 10,"desc": "工资5000","tags": ["健身","旅游","购物"]
}PUT /index/_doc/6
{"name": "三","xm": "三","age": 10,"desc": "工资5000","tags": ["健身","旅游","购物"]
}

match和term

Match查询和Term查询是Elasticsearch中常用的查询类型,它们有以下区别:

  1. 匹配方式:

  • Term查询:对查询条件不进行分词,直接按照完全匹配的方式进行查询。

  • Match查询:对查询条件进行分词,然后对分词后的词项进行匹配。

  1. 查询字段类型:

  • Term查询:适用于精确匹配的字段,如关键字(keyword)类型或未分词的文本类型(如"张三",不会被分词)。

  • Match查询:适用于全文本字段,如全文本(text)类型或已分词的文本类型(如"张三 张三",会被分词成两个词项"张三")。

  1. 匹配精度:

  • Term查询:精确匹配,只有完全匹配的词项才会被返回。

  • Match查询:默认为词项级别的匹配,可以根据分析器的分词规则进行模糊匹配。

  1. 执行效率:

  • Term查询:由于不进行分词,查询速度较快。

  • Match查询:需要对查询条件进行分词,可能会影响查询性能。

根据具体的查询需求,选择合适的查询类型可以提高查询的准确性和效率。如果需要精确匹配的查询,且不需要分词,可以选择Term查询;如果需要对分词后的文本进行匹配,可以选择Match查询。

match查询

# match 查询时,会对查询条件先分词
# 而name字段类型为keyword,不会分词,所以只能搜到name=张三的数据
GET index/_search
{"query": {"match": {"name": "张三"}},"_source": ["name","xm"]
}
# match 查询,会对查询条件先分词
# xm字段类型为text,用ik_max_smart分词,会分词,所以只能搜到文档xm字段分词后,结果为张三分词后的所有数据
GET index/_search
{"query": {"match": {"xm": "张三"}},"_source": ["name","xm"]
}

 

term查询

# term 查询时,不会对查询条件进行分词,name为keyword,所以只能完全匹配
GET index/_search
{"query": {"term": {"name": "张三"}}
}
# term 查询,不会对查询条件进行分词
# xm字段类型为text,用ik_max_smart分词,会分词,所以能查到文档分词后为张三的数据
GET index/_search
{"query": {"term": {"xm": "张三"}},"_source": ["name","xm"]
}

 

过滤字段查询

# 查询结果只展示 name和xm两个字段
GET index/_search
{"_source": ["name","xm"]
}

排序

# 查询结果排序
GET index/_search
{"_source": ["name", "age"], "sort": [{"age": {"order": "desc"}}]
}

分页查询

# 分页查询
GET index/_search
{"_source": ["name", "age"],"from": 0,"size": 2
}

多条件查询(布尔值查询)

must

类似sql中的 and

# 查询 name = 张三 并且 age = 30 
GET index/_search
{"query": {"bool": {"must": [{"match": {"name": "张三"}},{"match": {"age": "30"}}]}}
}

should

类似sql中的 or

# 查询 name = 张三 或者 name = 李三
GET index/_search
{"query": {"bool": {"should": [{"match": {"name": "张三"}},{"match": {"name": "李三"}}]}}
}

must_not

类似sql中的 not in

# 查询 name != 张三 并且 name != 李三 
GET index/_search
{"query": {"bool": {"must_not": [{"match": {"name": "张三"}},{"match": {"name": "李三"}}]}}
}

filter

在Elasticsearch中,过滤器(Filter)是一种用于精确筛选文档的查询子句,主要用于限制搜索结果的范围。与查询(Query)不同,过滤器不会评分和排序结果,而是根据指定的条件进行筛选。这可以提高查询性能,特别是在过滤大量文档的情况下。

过滤器可以用于各种条件,如范围查询、存在性检查、逻辑运算等。常见的过滤器类型包括:

  1. Term Filter:根据指定的词项进行精确匹配筛选。

  2. Range Filter:通过指定的范围进行筛选,可以用于数值、日期等字段。

  3. Exists Filter:检查字段是否存在于文档中。

  4. Bool Filter:通过逻辑运算符(AND、OR、NOT)对其他过滤器进行组合。

  5. Geo Distance Filter:通过指定的地理位置和距离范围进行地理位置过滤。

  6. Script Filter:使用自定义脚本进行筛选。

过滤器可以单独使用,也可以与查询结合使用。如果需要对搜索结果进行精确的筛选,并且不需要评分和排序,建议使用过滤器来提高查询性能。

# 查询xm=张三,并且age < 30 且 age >= 10 ,并且age 倒序
GET index/_search
{"_source": ["xm","age"],"query": {"bool": {"must": [{"match": {"xm": "张三"}}], "filter": [{"range": {"age": {"gte": 10,"lt": 30}}}]}},"sort": [{"age": {"order": "desc"}}]
}# 查询xm=张三,并且age < 30 且 age >= 10 ,并且 xm 字段值
GET index/_search
{"_source": ["xm","age"],"query": {"bool": {"must": [{"match": {"xm": "张三"}}],"filter": [{"range": {"age": {"gte": 10,"lt": 30}}},{"exists": {"field": "xm"}}]}}
}

 

高亮查询

# 对搜索结果命中的字段添加自定义html标签
GET index/_search
{"query": {"term": {"xm": {"value": "张三"}}}, "highlight": {"pre_tags": "<font color = 'red'>","post_tags": "</font>", "fields": {"xm": {}}},"_source": "xm"
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/85122.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蝉妈妈:2023年抖音电商半年报(附下载)

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 平台流量竞争从愈发激烈变为趋于愈加缓和商家直攝总时长与观众君播总时长的总体趋势并没有愈加激烈&#xff0c;从23年上半年各自流量的同比增速来看&#xff0c;观众看摄总时长增速高于商家直攝总时…

电脑合上盖子无线网络不会断开

控制面板\硬件和声音\电源选项\系统设置 最终选择不会采取任何操作 选择不会采取任何操作

Cocos Creator的 Cannot read property ‘applyForce‘ of undefined报错

序&#xff1a; 1、博主是看了这个教程操作的时候出的bug>游戏开发 | 17节课学会如何用Cocos Creator制作3D跑酷游戏 | P9 代码控制对象移动_哔哩哔哩_bilibili 2、其实问题不是出在代码上&#xff0c;但是发现物体就是不平移 3、node全栈的资料》node全栈框架 正文…

逆向破解学习-雷电星海战歌

apk 雷电星海战歌 https://download.csdn.net/download/AdrianAndroid/88200826 安装apk&#xff0c;并试玩 # 通过关键字搜索jad 找到统一支付接口 找到匿名内部类的名称 Hook代码 public class HookComAstPlane extends HookImpl {Overridepublic String packageNam…

竞赛项目 深度学习手势识别算法实现 - opencv python

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习手势识别算法实现 - opencv python 该项目较为新颖…

LeetCode 31题:下一个排列

目录 题目 思路 代码 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序…

Jenkins 中 shell 脚本执行失败却不自行退出

Jenkins 中 执行 shell 脚本时&#xff0c;有时候 shell 执行失败了&#xff0c;或者判断结果是错误的&#xff0c;但是 Jenkins 执行完成后确提示成功 success 。 此时&#xff0c;可以通过条件判断来解决这个问题&#xff0c;让 Jenkins 强制退出并提示执行失败 failed 。 …

Nginx使用proxy_cache指令设置反向代理缓存静态资源

场景 CentOS7中解压tar包的方式安装Nginx&#xff1a; CentOS7中解压tar包的方式安装Nginx_centos7 tar文件 怎么load_霸道流氓气质的博客-CSDN博客 参考上面流程实现搭建Nginx的基础上&#xff0c;实现静态资源的缓存设置。 注意上面安装时的目录是在/opt/nginx目录下&…

win10 + VS2022 安装opencv C++

最近需要用到C opencv&#xff0c;看了很多帖子都需要自己编译opencv源码。为避免源码编译&#xff0c;可以使用VS来配置opencv C。下面是主要过程&#xff1a; 目录 1. 从官网下载 opencv - Get Started - OpenCV 2. 点击这个exe文件进行安装 3. 配置环境变量 4. VS中的项…

java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 tbms

​ 项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以…

Word转PDF工具哪家安全?推荐好用的文件格式转换工具

Word文档是我们最常见也是最常用的办公软件&#xff0c;想必大家都知道了Word操作起来十分的简单&#xff0c;而且功能也是比较齐全的。随着科技的不断进步&#xff0c;如今也是有越来越多类型的办公文档&#xff0c;PDF就是其中之一&#xff0c;那么word转pdf怎么转?Word转PD…

DSP学习笔记

TI公司提供的c/c编译器&#xff0c;可以将其变成dsp语言。char类型本来是8位&#xff0c;在dsp里面是16位&#xff0c;int也是16位&#xff0c;long才是32位&#xff0c;float也是32位&#xff0c;enum是16位&#xff0c;double32位&#xff0c;long double是32位&#xff0c;p…

客户端脚本安全

客户端脚本安全 白帽子讲web安全 ———— a.了解web安全测试的基本知识 b.掌握前端的脚本安全知识&#xff0c;了解基本的前端安全测试条目&#xff0c;如同源策略、xss攻击测试、CSRF测试、点击劫持测试 c.webinsepct nessus 绿盟扫描 数据流 输入输出 浏览器安全 同源…

【HCIP】重发布实验

题目&#xff1a; 配置&#xff1a; R1 //配置ip地址 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [r1-GigabitEthernet0/0/0]int g0/0/1 [r1-GigabitEthernet0/0/1]ip add 13.1.1.1 24 [r1-GigabitEthernet0/0/1]int lo0 [r1-LoopBack0]ip add 1.1.1.1 24 /…

MySQL—日志

这里写目录标题 undo logundo log的作用undo log页记录的是什么 Buffer Pool为什么需要Buffer PoolBuffer Pool缓存什么 redo log什么是redo logredo log的作用redo log什么时候刷盘undo和redo的区别 binlogbinlog 作用redo log和binlog区别如果数据数据被删了&#xff0c;能用…

【redis】redis的认识和安装

目录 1.redis是什么2.Redis的特点3.安装redis4.设置远程连接4.1 开启隧道4.2 可视化客户端连接4.3 开启防火墙 5.redis常见数据类型5.1 redis的一些全局命令5.2 数据结构 6. redis的典型应用---缓存&#xff08;cache&#xff09;6.1 使用redis做缓存6.2 缓存穿透&#xff0c;缓…

并发——Atomic 原子类总结

文章目录 1 Atomic 原子类介绍2 基本类型原子类2.1 基本类型原子类介绍2.2 AtomicInteger 常见方法使用2.3 基本数据类型原子类的优势2.4 AtomicInteger 线程安全原理简单分析 3 数组类型原子类3.1 数组类型原子类介绍3.2 AtomicIntegerArray 常见方法使用 4 引用类型原子类4.1…

wordpress数据表中标签和分类如何区分?

wordpress中标签和分类是什么关系怎么区分&#xff1f;最后有一个群的网友告诉了我文章ID和标签ID的关系是放在了wp_term_relationships表中&#xff0c;然后我百度了下这个表的结构和相关介绍&#xff0c;发现果然如此&#xff0c;先把文章保存起来&#xff1a; wp_term_rela…

EasyPoi导出 导入(带校验)简单示例 EasyExcel

官方文档 : http://doc.wupaas.com/docs/easypoi pom的引入: <!-- easyPoi--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.0.0</version></dep…

Java培训班出来能找到工作吗?有没有想详细了解的呢

参加Java培训班可以提升你的编程技能和就业竞争力&#xff0c;但能否找到工作还取决于多个因素&#xff0c;如个人能力、市场需求、就业竞争等。参加Java培训班可以帮助你获得系统的Java编程知识和实践经验&#xff0c;了解行业最佳实践和流行的技术框架。这有助于你在面试时展…