ElasticSearch的安装与使用

news2024/12/27 2:09:11

ElasticSearch的安装与使用

docker安装

docker进行安装Elasticsearch

在这里插入图片描述

1.拉取镜像
docker pull elasticsearch:7.6.2
2.创建实例
mkdir -p /docker/elasticsearch/config
mkdir -p /docker/elasticsearch/data
echo "http.host: 0.0.0.0" >> /docker/elasticsearch/config/elasticsearch.yml
chmod -R 777 /docker/elasticsearch/ 
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms256m -Xmx512m" \
-v /docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /docker/elasticsearch/data:/usr/share/elasticsearch/data \
-v /docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.6.2

-e ES_JAVA_OPTS="-Xms256m -Xmx512m 设置 ES 的初始内存和最大内存

docker进行安装Kibana

在这里插入图片描述

1.拉取镜像
docker pull kibana:7.6.2 可视化界面
2.创建实例
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://<你的虚拟机ip>:9200 -p 5601:5601 \
-d kibana:7.4.2

Elasticsearch的简单使用

倒排索引机制

mysql这种就是正向索引,倒排索引就是相当于先找词,再通过词对应id去找内容

进入kibana

  • 进入 <你的ip地址>:5601
    在这里插入图片描述

基础命令

GET /_cat/nodes
# 查看所有节点
GET /_cat/health
# 查看 es 健康状况
GET /_cat/master
# 查看主节点
GET /_cat/indices
# 查看所有索引

1.增加

  • 在 test 索引下的 filed 类型下保存 1 号数据
PUT test/filed/1
{ 
	"name": "Your Name"
}

事实上POST 与 PUT都可以
POST 新增。如果不指定 id,会自动生成 id。指定 id 就会修改这个数据,并新增版本号
PUT 可以新增可以修改。从、但PUT 必须指定 id;

2.查询

  • 去查询我们刚刚插入的数据
GET test/filed/1
  • 结果:
{
  "_index" : "test",
  "_type" : "filed",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "Your Name"
  }
}

3.更新

POST test/filed/1/_update
{ 
	"doc":{ 
		"name": "Your Name1"
	}
}
POST test/filed/1
{ 
	"name": "Your Name2"
}
PUT test/filed/1
{ 
	"name": "Your Name3"
}

那么这几种方式有什么不同呢?

不同:POST 操作会对比数据,如果相同不会有什么操作,文档 version 不增加,PUT 操作总会将数据重新保存并增加 version 版本;
_update对比元数据如果一样就不进行任何操作。

version有什么用?

  • version 版本号 – 7之前用来做乐观锁
  • seq_no 更新次数 – 7用来做乐观锁

4.删除

DELETE test/filed/1
DELETE test

5.批量操作

POST test/filed/_bulk
{"index":{"_id":"1"}}
{"name":"Your Name1"}
{"index":{"_id":"2"}}
{"name":"Your Name2"}`

Elasticsearch进阶

SearchAPI

ES 支持两种基本方式检索

1. 通过使用 REST request URI 发送搜索参数(uri+检索参数)

这种方式是通过在请求的查询字符串中添加搜索参数来实现的。这种方式比较简单,适合快速查询和简单的参数传递。以下是一个使用 URI 参数进行搜索的例子:

GET /test_index/_search?q=name:John

在这个例子中,/test_index/_search 是请求的路径,?q=name:John 是查询参数,表示我们想要检索索引为 test_index 中 name 字段值为 “John” 的文档。

优点:

简单易用,适合快速查询。
适合传递简单的查询参数。

缺点:

查询字符串长度有限制。
对于复杂的查询,可能难以阅读和编写。
查询参数可能被URL编码,导致查询字符串复杂。

2.通过使用 REST request body 来发送它们(uri+请求体)

这种方式是通过在请求的正文(body)中发送搜索参数来实现的。这种方式可以处理复杂的查询,并且提供了更多的灵活性,尤其是对于结构化查询(如 JSON 格式的查询)。
以下是一个使用请求体发送搜索查询的例子:

POST /test_index/_search
{
  "query": {
    "match": {
      "name": "John"
    }
  }
}

在这个例子中,/test_index/_search 是请求的路径,请求体是一个 JSON 对象,包含了查询信息。

优点:

支持复杂的查询,包括结构化查询。
请求体是 JSON 格式,便于阅读和编写。
可以发送任何 JSON 数据,包括复杂的查询结构。

缺点:

相比查询字符串,可能更复杂。
需要更多的HTTP请求体处理。

Query DSL

1. 基本语法格式
  • Elasticsearch的Query DSL使用JSON格式来构建查询。基本格式如下:
{
  "QUERY_NAME": {
    "ARGUMENT": "VALUE",
    "ARGUMENT": "VALUE",
    // ...其他参数
  }
}
对于字段特定的查询,格式如下:

{
  "QUERY_NAME": {
    "FIELD_NAME": {
      "ARGUMENT": "VALUE",
      // ...其他参数
    }
  }
}

QUERY_NAME 是查询的类型,例如 match_all、match、match_phrase 等。

2. 检索信息
  • 查询所有文档
GET /test_index/_search
{ "query": { "match_all": {} } }
  • 返回部分字段
GET /test_index/_search
{ "query": { "match_all": {} }, "_source": ["age", "balance"] }
3. Match 查询
GET /test_index/_search
{ "query": { "match": { "account_number": "20" } } }

Match 查询适用于字符串和基本类型,可以精确匹配或进行全文检索。

  • Match_phrase 查询
GET /test_index/_search
{ "query": { "match_phrase": { "address": "mill road" } } }
Match_phrase 查询用于短语匹配,不会对短语进行分词。
  • Multi_match 查询
GET /test_index/_search
{ "query": { "multi_match": { "query": "mill", "fields": ["state", "address"] } } }

Multi_match 查询可以在多个字段上执行匹配。

4.Bool 查询

Bool 查询允许组合多个查询:

  • must:所有条件都必须匹配。
  • should:至少有一个条件匹配。
  • must_not:条件必须不匹配。
GET /test_index/_search
{ "query": { "bool": { "must": [{ "match": { "address": "mill" } }, { "match": { "gender": "M" } }], "should": [{"match": { "address": "lane" }}], "must_not": [{"match": { "email": "baluba.com" }}] } } }
5.Filter 查询
  • Filter 查询不返回相关性分数,适用于过滤操作。
GET /test_index/_search
{ "query": { "bool": { "must": [{"match": {"address": "mill"}}], "filter": {"range": {"balance": {"gte": 10000, "lte": 20000}}} } } }
6.Term 查询
  • Term 查询用于精确匹配非字符串字段。
GET /test_index/_search
{ "query": { "bool": { "must": [{"term": {"age": {"value": "28"}}}, {"match": {"address": "990 Mill Road"}}] } } }
7. 聚合(Aggregations)
  • 聚合用于从数据中提取统计信息。
GET /test_index/_search
{ "query": { "match": { "address": "mill" } }, "aggs": { "group_by_state": { "terms": { "field": "age" }

Mapping

Mapping(映射)在Elasticsearch中扮演着至关重要的角色,它定义了索引中每个字段的类型、索引方式以及其他一些行为。以下是关于Mapping的详细解释:

1. 字段类型

字段类型(Field Type)是Elasticsearch中用于指定字段数据类型的关键。常见的字段类型包括:

  • keyword:适合精确匹配,如用于过滤、排序和聚合。
  • text:用于全文搜索,索引时会进行分词。
  • integer、long、float、double:用于数字类型的字段。
  • date:用于日期类型的字段。
  • boolean:用于布尔类型的字段。
  • ip、geo_point、geo_shape:用于地理信息字段。
2. 映射

Mapping定义了每个字段的类型、是否被索引、是否分析以及各种其他属性。以下是一些关于映射的要点:
映射可以在创建索引时指定。
映射可以在索引创建后添加或更新,但通常建议在索引创建时完成。
映射定义了字段如何被存储和索引,包括分词器、分析器和索引选项。

#查看映射信息
GET /my-index/_mapping

#修改映射信息
#创建索引并指定映射:
PUT /my-index
{ "mappings": { "properties": { "age": { "type": "integer" }, "email": { "type": "keyword" }, "name": { "type": "text" } } } }

#添加新的字段映射:
PUT /my-index/_mapping
{ "properties": { "employee-id": { "type": "keyword", "index": false } } }

#更新映射:
#由于Elasticsearch不允许直接更新现有字段的映射,如果需要更新映射,通常的做法是创建一个新的索引并重新索引所有数据。
3.数据迁移

1.创建具有新映射的新索引。
2.使用 _reindex API将旧索引的数据迁移到新索引。
例如:

POST _reindex
{ "source": { "index": "twitter" }, "dest": { "index": "new_twitter" } }
  • 对于包含多类型的旧索引,可以指定类型进行迁移:
POST _reindex
{ "source": { "index": "twitter", "type": "tweet" }, "dest": { "index": "tweets" } }
4.新版本改变

Elasticsearch 7.x及以后版本移除了type的概念,这是因为不同类型的相同字段在Lucene中会被视为同一个字段,这可能导致性能问题。以下是几个重要变化:
Elasticsearch 7.x:URL中的type参数为可选。
Elasticsearch 8.x:不再支持URL中的type参数。
为了解决这些问题,通常的做法是将索引从多类型迁移到单类型,或者将类型数据迁移到新的索引中。

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

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

相关文章

【C++】红黑树的封装——同时实现map和set

目录 红黑树的完善默认成员函数迭代器的增加 红黑树的封装红黑树模板参数的控制仿函数解决取K问题对Key的非法操作 insert的调整map的[]运算符重载 在list模拟实现一文中&#xff0c;介绍了如何使用同一份代码封装出list的普通迭代器和const迭代器。今天学习STL中两个关联式容器…

DTH11温湿度传感器

DHT11 是一款温湿度复合传感器&#xff0c;常用于单片机系统中进行环境温湿度的测量。以下是对 DHT11 温湿度传感器的详细讲解&#xff1a; 一、传感器概述 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感…

如何在Unity WebGL上实现一套全流程简易的TextureStreaming方案

项目介绍 《云境》是一款使用Unity引擎开发的WebGL产品&#xff0c;有展厅&#xff0c;剧本&#xff0c;Avatar换装&#xff0c;画展&#xff0c;语音聊天等功能&#xff0c;运行在微信小程序和PC&#xff0c;移动端网页&#xff0c;即开即用。 当前问题和现状 当前项目…

Qt-QTableWidget多元素控件(37)

目录 描述 QTableWidget 方法 QTableWidgetItem 信号 QTableWidgetItem 方法 使用 图形化界面操作 代码操作 描述 这是一个表格控件&#xff0c;表格中的每一个单元格&#xff0c;都是一个 QTableWidgetItem 对象 QTableWidget 方法 item(int row,int column)根据⾏数…

[半导体检测-7]:半导体检测技术:无图案晶圆检测与图案晶圆检测

前言&#xff1a; 半导体检测技术中&#xff0c;无图案晶圆检测与图案晶圆检测是两种重要的检测方式&#xff0c;它们在检测原理、应用场景及挑战等方面存在显著差异。以下是对这两种检测技术的详细分析&#xff1a; 一、无图案晶圆检测 1. 检测原理 无图案晶圆检测主要关注…

DRF实操学习——收货地址的设计

DRF实操学习——收货地址的设计 1.行政区划表的设计2. 行政区划表接口演示1.返回所有的省份2. 查询指定上级行政区划的所有子区划&#xff0c;以及展示自身区划 3.行政区划表接口重写补充&#xff1a;前端请求逻辑4. 优化5.收货地址的设计6. 收货地址表接口重写7.优化1. 优化返…

Android 12系统源码_输入系统(三)输入事件的加工和分发

前言 上一篇文章我们具体分析了InputManagerService的构造方法和start方法&#xff0c;知道IMS的start方法经过层层调用&#xff0c;最终会触发Navite层InputDispatcher的start方法和InputReader的start方法。InputDispatcher的start方法会启动一个名为InputDispatcher的线程&…

混拨动态IP代理的优势是什么

在当今互联网时代&#xff0c;隐私保护和网络安全成为了人们关注的焦点。无论是个人用户还是企业&#xff0c;都希望能够在网络上自由、安全地进行各种活动。混拨动态IP代理作为一种新兴的技术手段&#xff0c;正逐渐受到大家的青睐。那么&#xff0c;混拨动态IP代理到底有哪些…

【工具】JDK版本不好管理,SDKMAN来帮你

前言 &#x1f34a;缘由 SDKMAN真是好&#xff0c;JDK切换没烦恼 &#x1f423; 闪亮主角 大家好&#xff0c;我是JavaDog程序狗 今天跟大家能分享一个JDK版本管理工具SDKMAN 当你同时使用JDK 1.8的和JDK 17并行维护两个项目时。每次在两个项目之间并行开发&#xff0c;切…

进阶数据库系列(十三):PostgreSQL 分区分表

概述 在组件开发迭代的过程中&#xff0c;随着使用时间的增加&#xff0c;数据库中的数据量也不断增加&#xff0c;因此数据库查询越来越慢。 通常加速数据库的方法很多&#xff0c;如添加特定的索引&#xff0c;将日志目录换到单独的磁盘分区&#xff0c;调整数据库引擎的参…

2.4卷积3

2.4卷积3 文章学习自https://zhuanlan.zhihu.com/p/41609577&#xff0c;详细细节请读原文。 狄拉克 δ \delta δ 函数&#xff1a; δ ( x ) { ∞ , x 0 0 , x ≠ 0 \delta (x){\begin{cases} \infty ,& x0\\ 0,& x\neq 0\end{cases}} δ(x){∞,0,​x0x0​ 并…

小柴冲刺软考中级嵌入式系统设计师系列二、嵌入式系统硬件基础知识(2)嵌入式微处理器基础

目录 冯诺依曼结构 哈佛结构 一、嵌入式微处理器的结构和类型 1、8位、16位、32位处理器的体系结构特点 2、DSP处理器的体系结构特点 3、多核处理器的体系结构特点 二、嵌入式微处理器的异常与中断 1、异常 2、中断 flechazohttps://www.zhihu.com/people/jiu_sheng …

54 循环神经网络RNN_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录循环神经网络使用循环神经网络的语言模型困惑度&#xff08;perplexity&#xff09;梯度剪裁 循环神经网络 使用循环神经网络的语言模型 输入“你”&#xff0c;更新隐变量&#xff0c;输出“好”。 困惑度&#xff08;perplexity&#xff…

【递归】8. leetcode 671 二叉树中第二小的节点

题目描述 题目链接&#xff1a;二叉树中第二小的节点 2 解答思路 注意这句话&#xff1a;该节点的值等于两个子节点中较小的一个 二叉树的根节点的值是整棵树中最小的值 本道题所要求的是二叉树中第二小的节点。因为根节点是最小的节点&#xff0c;那么我们只需要找到第一…

HT5169内置BOOST升压的11W I2S输入D类音频功放

1 特性 ● 电源供电 升压输入VBAT:2.5V-5.5V; 升压输出PVDD可调&#xff0c;最高7.5V DVDD/AVDD分辨率:3.3V ● 音频性能 9.0W (VBAT3.7V, PVDD 7.5V, RL3Ω.THDN10%) 11.0W(VBAT3.7V, PVDD 7.5V, RL2Ω.THDN10% 5.5W (VBAT3.7V, PVDD 6.5V, RL4Ω.THDN10%) ● 灵活的…

红米k60至尊版工程固件 MTK芯片 资源预览 刷写说明 与nv损坏修复去除电阻图示

红米k60至尊版机型代码为:corot。 搭载了联发科天玑9200+处理器。此固件mtk引导为MT6985。博文将简单说明此固件的一些特点与刷写注意事项。对于NV损坏的机型。展示修改校验电阻的图示。方便改写参数等 通过博文了解 1💝💝💝-----此机型工程固件的资源刷写注意事项 2…

css 中 ~ 符号、text-indent、ellipsis、ellipsis-2、text-overflow: ellipsis的使用

1、~的使用直接看代码 <script setup> </script><template><div class"container"><p><a href"javascript:;">纪检委</a><a href"javascript:;">中介为</a><a href"javascript:…

曲线图异常波形检测系统源码分享

曲线图异常波形检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

【cache】浅析四种常用的缓存淘汰算法 FIFO/LRU/LFU/W-TinyLFU

本文浅析淘汰策略与工作中结合使用、选取&#xff0c;并非针对算法本身如何实现的 文章目录 FIFOLFULRUW-TinyLFU实践与优化监控与调整 FIFO first input first output &#xff0c; 先进先出&#xff0c;即最早存入的元素最先取出&#xff0c; 典型数据结构代表&#xff1a;…

SpringCloud-Netflix第一代微服务快速入门

1.springCloud常用组件 Netflix Eureka 当我们的微服务过多的时候&#xff0c;管理服务的通信地址是一个非常麻烦的事情&#xff0c;Eureka就是用来管理微服务的通信地址清单的&#xff0c;有了Eureka之后我们通过服务的名字就能实现服务的调用。 Netflix Ribbon\Feign : 客…