EaticSearch学习

ES学习目标

在这里插入图片描述

1、全文检索

在这里插入图片描述

2、ES介绍

在这里插入图片描述

2.1 安装(docker)

在这里插入图片描述

docker pull elasticsearch:7.14.0
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.14.0

初步检索

1、_cat
GET /_cat/nodes:查看所有节点
GET /_cat/health:查看 es 健康状况
GET /_cat/master:查看主节点
GET /_cat/indices:查看所有索引 show databases;

PUT

put 不可以不带id,否则就报错 如果对同一个id进行发送put,会进行修改

http://101.227.52.230:9200/customer/external/1{ "name": "John Doe"
}发送第一次
{"_index": "customer","_type": "external","_id": "1","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 0,"_primary_term": 1
}-- 发送第二次
{"_index": "customer","_type": "external","_id": "1","_version": 2,"result": "updated","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 1,"_primary_term": 1
}

POST

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

GET

http://101.227.52.230:9200/customer/external/1

{"_index": "customer","_type": "external","_id": "1","_version": 3,"_seq_no": 2,"_primary_term": 1,"found": true,"_source": {"name": "John Doe"}
}

在这里插入图片描述

3.复杂检索

容器保持自开启状态

docker update 容器id --restart=always

ES 支持两种基本方式检索 :

  • 一个是通过使用 REST request URI 发送搜索参数(uri+检索参数)
  • 另一个是通过使用 REST request body 来发送它们(uri+请求体)

3.1 检索信息

一切检索从_search 开始

1、GET bank/_search 
检索 bank 下所有信息,包括 type 和 docs2、GET bank/_search?q=*&sort=account_number:asc
请求参数方式检索响应结果解释:
took - Elasticsearch 执行搜索的时间(毫秒)
time_out - 告诉我们搜索是否超时
_shards - 告诉我们多少个分片被搜索了,以及统计了成功/失败的搜索分片
hits - 搜索结果
hits.total - 搜索结果
hits.hits - 实际的搜索结果数组(默认为前 10 的文档)
sort - 结果的排序 key(键)(没有则按 score 排序)
score 和 max_score –相关性得分和最高得分(全文检索用)

uri+请求体进行检索

GET bank/_search
{ "query": { "match_all": {}
},"sort": [
{ "account_number": { "order": "desc"
}
}
]
}HTTP 客户端工具(POSTMAN),get 请求不能携带请求体,我们变为 post 也是一样的
我们 POST 一个 JSON 风格的查询请求体到 _search API。
需要了解,一旦搜索的结果被返回,Elasticsearch 就完成了这次请求,并且不会维护任何
服务端的资源或者结果的 cursor(游标)

Query DSL
基本语法格式:
Elasticsearch 提供了一个可以执行查询的 Json 风格的 DSL(domain-specific language 领域特定语言)。这个被称为 Query DSL。该查询语言非常全面,并且刚开始的时候感觉有点复杂,真正学好它的方法是从一些基础的示例开始的。

一个查询语句 的典型结构
{
QUERY_NAME: {
ARGUMENT: VALUE, ARGUMENT: VALUE,... }
}如果是针对某个字段,那么它的结构如下:
{
QUERY_NAME: {
FIELD_NAME: {
ARGUMENT: VALUE, ARGUMENT: VALUE,... }
}
}
GET bank/_search
{"query": {"match_all": {}},"from": 0,"size": 2,"sort": [{"balance": {"order": "desc"}}]
} query 定义如何查询,
 match_all 查询类型【代表查询所有的所有】,es 中可以在 query 中组合非常多的查
询类型完成复杂查询
 除了 query 参数之外,我们也可以传递其它的参数以改变查询结果。如 sort,size
 from+size 限定,完成分页功能
 sort 排序,多字段排序,会在前序字段相等时后续字段内部排序,否则以前序为准
返回部分字段 _source
GET bank/_search
{"query": {"match_all": {}},"from": 0,"size": 2,"sort": [{"balance": {"order": "desc"}}],"_source": ["balance","firstname"]
}
match【匹配查询】

1、基本类型(非字符串),精确匹配

GET bank/_search
{"query": {"match": {"balance": "49795"}}
}match 返回 balance=49795 的

2、字符串,全文检索

GET bank/_search
{"query": {"match": {"address": "129"}}
}
最终查询出 address 中包含 129 单词的所有记录
match 当搜索字符串类型的时候,会进行全文检索,并且每条记录有相关性得分。

在这里插入图片描述
3、字符串,多个单词(分词+全文检索)

GET bank/_search
{"query": {"match": {"address": "129 Street"}}
}
最终查询出 address 中包含 129 或者 Street 或者 129 Street 的所有记录,并给出相关性得分
match_phrase【短语匹配】
将需要匹配的值当成一个整体单词(不分词)进行检索
GET bank/_search
{"query": {"match_phrase": {"address": "mill road"}}
}
查出 address 中包含 mill road 的所有记录,并给出相关性得分
multi_match【多字段匹配】
GET bank/_search
{"query": {"multi_match": {"query": "Polly Lopezo","fields": ["firstname","city"]}}
}firstname 或者 city 包含 Polly或Lopezo
bool【复合查询】

bool 用来做复合查询:
复合语句可以合并 任何 其它查询语句,包括复合语句,了解这一点是很重要的。这就意味着,复合语句之间可以互相嵌套,可以表达非常复杂的逻辑。

must:必须达到 must 列举的所有条件GET bank/_search
{"query": {"bool": {"must": [{"match": {"address": "Frank"}},{"match": {"age": "22"}}]}}
}
必须匹配 address为Frank 并且age为22的记录

should:应该达到 should 列举的条件,如果达到会增加相关文档的评分,并不会改变
查询的结果。如果 query 中只有 should 且只有一种匹配规则,那么 should 的条件就会被作为默认匹配条件而去改变查询结果

GET bank/_search
{"query": {"bool": {"must": [{"match": {"address": "129"}},{"match": {"gender": "M"}}],"should": [{"match": {"age": "22"}}]}}
}

must_not 必须不是指定的情况

GET bank/_search
{"query": {"bool": {"must": [{"match": {"address": "129"}},{"match": {"gender": "M"}}],"must_not": [{"match": {"age": "37"}},{"match": {"age": "22"}}]}}
}
必须匹配 address为Frank 并且gender为M的记录 并且 age 不是22和37的记录

在这里插入图片描述

filter【结果过滤】

并不是所有的查询都需要产生分数,特别是那些仅用于 “filtering”(过滤)的文档。为了不计算分数 Elasticsearch 会自动检查场景并且优化查询的执行

GET bank/_search
{"query": {"bool": {"filter": {"range": {"age": {"gte": 20,"lte": 25}}},"must": [{"match": {"state": "ma"}}]}}
}age必须在20-25 并且 state为ma
term

和 match 一样。匹配某个属性的值。全文检索字段用 match,其他非 text 字段匹配用 term。
在这里插入图片描述

GET bank/_search
{"query": {"bool": {"must": [{"term": {"age": {"value": "28"}}},{"match": {"address": "990 Mill Road"}}]}}
}

aggregations(执行聚合)

聚合提供了从数据中分组和提取数据的能力。最简单的聚合方法大致等于 SQL GROUPBY 和 SQL 聚合函数。在 Elasticsearch 中,您有执行搜索返回 hits(命中结果),并且同时返回聚合结果,把一个响应中的所有 hits(命中结果)分隔开的能力。这是非常强大且有效的,您可以执行查询和多个聚合,并且在一次使用中得到各自的(任何一个的)返回结果,使用一次简洁和简化的 API 来避免网络往返。

  • 搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄,但不显示这些人的详情
#搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄,但不显示这些人的详情GET bank/_search
{"query": {"match": {"address": "mill"}},"aggs": {"group_by_age": {"terms": {"field": "age","size": 10}},"avg_age": {"avg": {"field": "age"}}},"size": 0}
}size:0 不显示搜索数据
aggs:执行聚合。聚合语法如下
"aggs": { 
"aggs_name 这次聚合的名字,方便展示在结果集中":{ "AGG_TYPE 聚合的类型
(avg,term,terms)": {}
}
},
  • 复杂:按照年龄聚合,并且请求这些年龄段的这些人的平均薪资
# 复杂:按照年龄聚合,并且请求这些年龄段的这些人的平均薪资GET bank/_search
{"query": {"match_all": {}},"aggs": {"age_group": {"terms": {"field": "age","size": 3},"aggs": {"avg_balance": {"avg": {"field": "balance"}}}}}
}

复杂:查出所有年龄分布,并且这些年龄段中 M 的平均薪资和 F 的平均薪资以及这个年龄段的总体平均薪资

# 复杂:查出所有年龄分布,并且这些年龄段中 M 的平均薪资和 F 的平均薪资以及这个年龄段的总体平均薪资GET bank/_search
{"query": {"match_all": {}},"aggs": {"groupby_age": {"terms": {"field": "age","size": 10},"aggs": {"groupby_gender": {"terms": {"field": "gender.keyword","size": 10},"aggs": {"avg_gender_balance": {"avg": {"field": "balance"}}}},"balance_avg": {"avg": {"field": "balance"}}}}}
}

Mapping

在这里插入图片描述
映射:
Mapping(映射)
Mapping 是用来定义一个文档(document),以及它所包含的属性(field)是如何存储和索引的。比如,使用 mapping 来定义:
 哪些字符串属性应该被看做全文本属性(full text fields)。
 哪些属性包含数字,日期或者地理位置。
 文档中的所有属性是否都能被索引(_all 配置)。
 日期的格式。
 自定义映射规则来执行动态添加属性。

1、查看 mapping 信息:

GET bank/_mapping

2、修改 mapping 信息
在这里插入图片描述
3、新版本改变

Es7 及以上移除了 type 的概念。
1、关系型数据库中两个数据表示是独立的,即使他们里面有相同名称的列也不影响使用,
但 ES 中不是这样的。elasticsearch 是基于 Lucene 开发的搜索引擎,而 ES 中不同 type
下名称相同的 filed 最终在 Lucene 中的处理方式是一样的。
2、两个不同 type 下的两个 user_name,在 ES 同一个索引下其实被认为是同一个 filed,
你必须在两个不同的 type 中定义相同的 filed 映射。否则,不同 type 中的相同字段
名称就会在处理中出现冲突的情况,导致 Lucene 处理效率下降。
3、去掉 type 就是为了提高 ES 处理数据的效率。
Elasticsearch 7.x
4、URL 中的 type 参数为可选。比如,索引一个文档不再要求提供文档类型。
Elasticsearch 8.x
5、 不再支持 URL 中的 type 参数。
解决:
1)、将索引从多类型迁移到单类型,每种类型文档一个独立索引
2)、将已存在的索引下的类型数据,全部迁移到指定位置即可。详见数据迁移

创建映射

# 、创建索引并指定映射
PUT /myindex
{"mappings": {"properties": {"age":{"type": "integer"},"name":{"type": "text"},"email":{"type": "keyword"}}}
}

添加新的字段映射

PUT /myindex/_mapping
{"properties": {"employee-id":{"type": "integer","index":false}}
}

更新映射

对于已经存在的映射字段,我们不能更新。更新必须创建新的索引进行数据迁移

数据迁移

先创建出 new_twitter 的正确映射。然后使用如下方式进行数据迁移

以前的版本不带type
POST _reindex [固定写法]
{ "source": { "index": "twitter"
},"dest": { "index": "new_twitter"
}
}
POST _reindex
{"source": {"index": "bank","type": "account"},"dest": {"index": "newbank"}
}

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

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

相关文章

oracle记录

文章目录 表操作查询表占用内存大小 表操作 查询表占用内存大小 select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_nameupper(表名);

【二分算法】

17. 二分查找(easy) 算法流程: 算法代码: int search(int* nums, int numsSize, int target) {// 初始化 left 与 right 指针int left 0, right numsSize - 1;// 由于两个指针相交时,当前元素还未判断,因…

C++traits

traits C的标准库提供了<type_traits>,它定义了一些编译时基于模板类的接口用于查询、修改类型的特征&#xff1a;输入的时类型&#xff0c;输出与该类型相关的属性 通过type_traits技术编译器可以回答一系列问题&#xff1a;它是否为数值类型&#xff1f;是否为函数对象…

AI工程师Devin的诞生,开启软件开发新纪元

Devin的诞生 最近&#xff0c;初创公司Cognition推出了一款名为Devin的全球首位AI工程师。尽管成立时间不到两个月&#xff0c;但公司拥有十名天才工程师&#xff0c;引起了行业内程序员的高度关注。研发团队在社交媒体上发布了一段演示视频&#xff0c;展示Devin的能力。 用户…

idea项目编译时报错:GC overhead limit exceeded

问题描述 今天idea构建一个新的项目时报错&#xff1a;GC overhead limit exceeded&#xff0c;错误是发生在编译阶段&#xff0c;而不是运行阶段。 ava: GC overhead limit exceeded java.lang.OutOfMemoryError: GC overhead limit exceededat com.sun.tools.javac.resources…

【ZZULIOJ】1061: 顺序输出各位数字(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 输入一个不大于10的9次方的正整数&#xff0c;从高位开始逐位分割并输出各位数字。 输入 输入一个正整数n,n是int型数据 输出 依次输出各位上的数字&#xff0c;每一个数字后面有一个空格…

python连接mysql数据库通用类

在 Python 中创建一个通用的数据库连接类&#xff0c;用于连接 MySQL 数据库并执行常见的数据库操作&#xff0c;可以提高代码的复用性和可维护性。下面是一个示例&#xff1a; python import mysql.connector class MySQLDatabase: def __init__(self, host, user, pass…

【高精度算法专题】【蓝桥杯备考训练】:高精度加法、高精度减法、高精度乘法、高精度除法【已更新完成】

目录 1、高精度加法 2、高精度减法 3、高精度乘法 4、高精度除法 1、高精度加法 给定两个正整数&#xff08;不含前导 0&#xff09;&#xff0c;计算它们的和。 输入格式 共两行&#xff0c;每行包含一个整数。 输出格式 共一行&#xff0c;包含所求的和。 数据范围 1≤…

OOCT WPF_D3D项目报错无法加载依赖项

运行示例项目报错缺少dll&#xff0c;发现运用了这个大老李&#xff0c;通过添加PATH路径也无法解决&#xff0c;看到debug文件夹下面没有其他的依赖项。 通过depneds工具可以看到 OCCTProxy_D3D.dll 缺少依赖项&#xff0c;图中的缺项都是OCCT生成的模块dll所以讲这些dll从..…

Java 中文官方教程 2022 版(五十)

原文&#xff1a;docs.oracle.com/javase/tutorial/reallybigindex.html 更多信息 原文&#xff1a;docs.oracle.com/javase/tutorial/jaxb/intro/info.html 有关 JAXB、XML 和 XML Schema 的更多信息&#xff0c;请参见&#xff1a; Java 社区进程页面&#xff1a; jcp.org/en…

DNS与DDNS

DNS&#xff08;Domain Name System&#xff09;和 DDNS&#xff08;Dynamic Domain Name System&#xff09;都关系到域名与IP地址的转换&#xff0c;但它们之间有一些关键的区别&#xff1a; DNS DNS 是互联网上用来将域名转换成IP地址的系统。当您在Web浏览器中输入一个网…

编程新手必看,python中循环语句学习(14)

介绍&#xff1a; Python3中的循环语句主要有两种&#xff1a;for循环和while循环。 for循环&#xff1a;用于遍历序列&#xff08;如列表、元组、字符串等&#xff09;中的元素&#xff0c;执行相应的代码块。在每次循环中&#xff0c;序列中的一个元素被赋值给一个变量&#…

第四百五十六回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 使用方法 3. 内容总结 我们在上一章回中介绍了"overlay_tooltip用法"相关的内容&#xff0c;本章回中将介绍onBoarding包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的onBo…

2024年 Mathorcup高校数学建模竞赛(C题)| 物流网络分拣中心 | 线性规划,流网络,多目标规划联合,小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;通过多目标规划解决物流网络分拣中心问题。结合线性规划&#xff0c;流网络等多元算…

数据结构-----枚举、泛型进阶(通配符?)

文章目录 枚举1 背景及定义2 使用3 枚举优点缺点4 枚举和反射4.1 枚举是否可以通过反射&#xff0c;拿到实例对象呢&#xff1f; 5 总结 泛型进阶1 通配符 ?1.1 通配符解决什么问题1.2 通配符上界1.3 通配符下界 枚举 1 背景及定义 枚举是在JDK1.5以后引入的。主要用途是&am…

c#使用TCP协议实现数据发送和接受

c#使用TCP协议实现数据发送和接受 使用TCP协议实现数据的发送和接受包括客户端和服务端两个部分&#xff1b; 1. 服务端代码如下所示&#xff1a; using System; using System.Net; using System.Net.Sockets; using System.Text;class Program {static void Main(){// 设置…

基于双向长短期神经网络LSTM的负荷预测,gru神经网络的负荷预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 基于双向长短期神经网络LSTM的负荷预测,gru神经网络的负荷预测 完整代码: 基于双向长短期神经网络LSTM的负荷预测,gru神经网络的负荷预测资源-CSDN文库 https://download.csdn.net/download/abc991835105/8910…

fastjson2 简单使用案例

maven 引入 <dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.43</version> </dependency>直接使用 Account account new .... // java类对象 // 将java对象转化为 J…

CMD命令窗口提示文字乱码

我下面说的是日文版系统&#xff0c;中文版会有差异。 一般情况下是 Shiftjis 通常我是用sakura editor来写bat&#xff0c;但是运行后会在cmd窗口出现乱码 test.bat set HENSU这是一个变数 echo %HENSU% pause 执行后出现乱码 原因是不做设置时&#xff0c;command prom…

3.2.k8s搭建-kubeadm

目录 一、虚拟机准备 二、所有节点环境准备 1.所有节点做hosts解析 2.所有节点重新命名 3.所有节点安装docker 4.所有节点为docker做linux内核转发 5.所有节点配置docker 6.所有节点关闭swap分区 7.所有节点验证网卡硬件编号是否冲突 8.所有节点配置允许iptables桥接…