ElasticSearch的安装与使用

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.mfbz.cn/a/883853.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言课程设计题目四:实验设备管理系统设计

序号系统设计题目进度1职工信息管理系统设计已完成&#xff0c;在本专栏2图书信息管理系统设计已完成&#xff0c;在本专栏3图书管理系统设计已完成&#xff0c;在本专栏4实验设备管理系统设计已完成&#xff0c;在本专栏5西文下拉菜单的设计链接6学生信息管理系统设计链接7学生…

c++9月20日

1.思维导图 2.顺序表 头文件 #ifndef RECTANGLE_H #define RECTANGLE_H#include <iostream>using namespace std;using datatype int ;//类型重定义class Seqlist { private://私有权限datatype *ptr; //指向堆区申请空间的起始地址int size;//堆区空间的长度int len …

汽车一键启动开关

‌ 一键启动点火开关是汽车上的一个重要功能&#xff0c;它替代了传统的机械钥匙&#xff0c;实现了简约的打火和熄火操作‌。移动管家一键启动点火开关的详细介绍&#xff1a; 汽车一键启动按钮12V24V通用超薄型汽车一键启动按键发动机启动按钮点火开关。超薄&#xff0c;…

软件测试学习笔记丨curl命令发送请求

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32332 一、简介 cURL是一个通过URL传输数据的&#xff0c;功能强大的命令行工具。cURL可以与Chrome Devtool工具配合使用&#xff0c;把浏览器发送的真实请求还原出来&#xff0c;附带认证信…

嵌入式项目:STM32平衡车详解 (基础知识篇) (基于STM32F103C8T6)

前言&#xff1a; 本文是基于B站草履虫编写的平衡车相关内容&#xff0c;包括模块和基础知识&#xff0c;结合代码进行讲解&#xff0c;将知识进行汇总 &#xff08;由于本篇内容较长&#xff0c;请结合目录使用) 注&#xff1a;基于开源精神&#xff0c;本文仅供学习参考 目…

如何用ChatGPT制作一款手机游戏应用

有没有想过自己做一款手机游戏&#xff0c;并生成apk手机应用呢&#xff1f;有了人工智能&#xff0c;这一切就成为可能。今天&#xff0c;我们就使用ChatGPT来创建一个简单的井字棋游戏&#xff08;Tic-Tac-Toe&#xff09;&#xff0c;其实这个过程非常轻松且高效。 通过Cha…

windows 使用PortAudio 对电脑进行录音

PortAudio 采用回调方式&#xff0c;这样可以一帧一帧的处理 头文件&#xff1a; #ifndef __CAPTURE_AUDIO__ #define __CAPTURE_AUDIO__#include <functional> #include <windows.h> #include "portaudio.h"#define SAMPLE_RATE 44100class CaptureAu…

大数据毕业设计选题推荐-国潮男装微博评论数据分析系统-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

JavaSE——lombok、juint单元测试、断言

一、lombok的使用 默认jvm不解析第三方注解&#xff0c;需要手动开启 链式调用 二、juint单元测试 下载juint包 public class TestDemo {// 在每一个单元测试方法执行之前执行Beforepublic void before() {// 例如可以在before部分创建IO流System.out.println("befor…

89个H5小游戏源码

下载地址&#xff1a;https://download.csdn.net/download/w2sft/89791650 亲测可用&#xff0c;代码完整&#xff0c;都是htmljs&#xff0c;保存到本地即可。 游戏截图&#xff1a;

【AI创作组】工程方向的硕士研究生学习Matlab的路径

1. MATLAB软件概述 1.1 MATLAB发展历程 MATLAB自20世纪70年代诞生以来,已经经历了多次重要的版本更新和功能扩展。 初始版本:MATLAB的前身只是一个简单的交互式矩阵计算器,由Cleve B. Moler博士在1970年代初期开发,目的是为了方便学生和研究人员使用线性代数软件包LINPAC…

游戏如何对抗改包

游戏改包是指通过逆向分析手段及修改工具&#xff0c;来篡改游戏包内正常的设定和规则的行为&#xff0c;游戏包被篡改后&#xff0c;会被植入/剔除模块进行重打包。 本期图文我们将通过实际案例分析游戏改包的原理&#xff0c;并分享游戏如何应对改包问题。 安卓平台常见的改…

车载软件调试工具系列---Trace32简介UI界面简介

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

基于nodejs+vue的旅游管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

想要高音质的开放式耳机?看看开放式蓝牙耳机排行榜前列的这些品牌!

​开放式蓝牙耳机现在超流行&#xff0c;不仅年轻人爱用&#xff0c;连不少上了年纪的人也喜欢在公园里散步时戴上。这些耳机无论是听歌、学习、健身还是办公&#xff0c;都能派上用场。到了2024年&#xff0c;想要挑到一款既好用又好听的开放式蓝牙耳机&#xff0c;得好好比较…

springboot+大数据基于数据挖掘的招聘信息可视化大屏系统【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…

基于gorm.io/sharding分表中间件使用案例

项目背景 项目中需要用到mysql的分表场景&#xff0c;调研了一些常用的分库分表中间件&#xff0c;比如&#xff0c;mycat&#xff0c;小米的Gaea&#xff0c;这两个中间件太重了&#xff0c;学习成本较大&#xff0c;另外mycat不是go写的。我们需要一个轻量级的go版本的分表中…

Android使用OpenCV 4.5.0实现扑克牌识别(源码分享)

一、显示效果展示 二、OpenCV 4.5.0 OpenCV 4.5.0是OpenCV&#xff08;Open Source Computer Vision Library&#xff0c;开源计算机视觉库&#xff09;的一个重要更新版本&#xff0c;该版本在多个方面进行了优化和新增了多项功能。 三、ONNX模型 ONNX&#xff08;Open Neu…

HCIP——HCIA回顾

第一章.HCIA复习 引入场景 其实IA我们主要学习的无非就是数据包在网络中传递的基本过程&#xff0c;我们设计一个场景&#xff0c;通过回顾web页面的请求过程&#xff0c;将IA学过的基本网络工作原理来串一遍。 (在本例中&#xff0c;ISP网络为学校提供了DNS服务&#xff0c;…

学习C++的第七天!

1.虚函数是在基类中用 virtual 关键字声明的函数&#xff0c;可以在派生类中被重写。纯虚函数是在虚函数的基础上&#xff0c;在基类中被初始化为 0 的函数&#xff0c;含有纯虚函数的类是抽象类&#xff0c;不能被实例化。 2.如果基类的析构函数不是虚函数&#xff0c;当通过…