ElasticSearch简介及常见用法

这篇具有很好参考价值的文章主要介绍了ElasticSearch简介及常见用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

Elasticsearch 是 Elastic Stack 核心的分布式搜索和分析引擎。 Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。 Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 可以快速索引、搜索和分析海量数据。
Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
官方文档(推荐):官方文档链接
官方中文:官方中文文档链接
社区中文:xiaoleilu.com、codingdict.com

一、基本概念

1、Index(索引)

动词:相当于 MySQL 中的 insert;
名词:相当于 MySQL 中的 Database。

2、Type(类型)

在 Index(索引)中,可以定义一个或多个类型。类似于 MySQL 中的 Table,同种类型的数据放在一起。

3、Document(文档)

保存在某个索引(Index)下,某种类型(Type)的一个数据(Document),文档是 JSON 格式的,Document 就像是 MySQL 中的某个 Table 里面的内容。

二、Docker 安装 Es

1、下载镜像文件

docker pull elasticsearch:8.12 :存储和检索数据
docker pull kibana:8.12 :可视化检索数据

2、创建实例

1.ElasticSearch

mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
chmod -R 777 /mydata/elasticsearch/ #保证权限
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \ #设置初始内存和占用最大内存
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:8.12 

2.Kibana

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://xxx:9200 -p 5601:5601 \
-d kibana:8.12
#xxx为自己的虚拟机地址

三、初步检索

1、_cat

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

2、索引一个文档(保存)

在 customer 索引下的 external 类型下保存 1 号数据为:

POST customer/external/1 
{ 
"name": "John Doe"
}
#PUT 和 POST 都可以,
#POST 新增。如果不指定 id,会自动生成 id。指定 id 就会修改这个数据,并新增版本号
#PUT 可以新增可以修改。PUT 必须指定 id;由于 PUT 需要指定 id,我们一般都用来做修改
#操作,不指定 id 会报错。

3、查询文档

GET customer/external/1
结果:

{ 
	"_index": "customer", //在哪个索引
	"_type": "external", //在哪个类型
	"_id": "1", //记录 id
	"_version": 2, //版本号
	"_seq_no": 1, //并发控制字段,每次更新就会+1,用来做乐观锁
	"_primary_term": 1, //同上,主分片重新分配,如重启,就会变化
	"found": true, "_source": { //真正的内容
	"name": "John Doe"
	}
}

4、更新文档

POST customer/external/1/_update
{ 
	"doc":{ 
		"name": "John Doew"
	}
}
或者
POST customer/external/1
{ 
	"name": "John Doe2"
}
或者
PUT customer/external/1
{ 
	"name": "John Doe"
}

不同:POST 操作会对比源文档数据,如果相同不会有什么操作,文档 version 不增加PUT 操作总会将数据重新保存并增加 version 版本;带_update 对比元数据如果一样就不进行任何操作。
看场景:
对于大并发更新,不带 _update;
对于大并发查询偶尔更新,带 _update;对比更新,重新计算分配规则。

5、删除文档&索引

DELETE customer/external/1
DELETE customer

6、bulk 批量 API

POST customer/external/_bulk
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
#语法格式:
{ action: { metadata }}\n
{ request body }\n
{ action: { metadata }}\n
{ request body }\n

四、进阶索引

1、SearchAPI

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

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

检索信息

  • 请求参数方式检索
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"
			}
		}
	]
}

2、Query DSL

(1) 基本语法格式
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": 5, 
	"sort": [
		{ 
			"account_number": { 
				"order": "desc"
			}
		}
	]
}

其中:

  • query 定义如何查询,
  • match_all 查询类型【代表查询所有的所有】,es 中可以在 query 中组合非常多的查询类型完成复杂查询
  • 除了 query 参数之外,我们也可以传递其它的参数以改变查询结果。如 sort,size
  • from+size 限定,完成分页功能
  • sort 排序,多字段排序,会在前序字段相等时后续字段内部排序,否则以前序为准

其他常用的语法比如
match【匹配查询】
match_phrase【短语匹配】
multi_match【多字段匹配】
bool【复合查询】
filter【结果过滤】
term【全文检索字段用 match,其他非 text 字段匹配用 term。】
aggregations【执行聚合】(最简单的聚合方法大致等于 SQL GROUPBY 和 SQL 聚合函数)
具体使用方法见官网:ElasticSearch官方文档链接

3、分词

一个 tokenizer(分词器)接收一个字符流,将之分割为独立的 tokens(词元,通常是独立的单词),然后输出 tokens 流。例如,whitespace tokenizer 遇到空白字符时分割文本。它会将文本 “Quick brown fox!” 分割为 [Quick, brown, fox!]。该tokenizer(分词器)还负责记录各个 term(词条)的顺序或 position 位置(用于 phrase 短语和 word proximity 词近邻查询),以及 term(词条)所代表的原始 word(单词)的 start
(起始)和 end(结束)的 character offsets(字符偏移量)(用于高亮显示搜索的内容)。Elasticsearch 提供了很多内置的分词器,可以用来构建 custom analyzers(自定义分词器)。
(1)安装 ik 分词器
进入 es 容器内部 plugins 目录

docker exec -it 容器 id /bin/bash
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-anal
ysis-ik-7.4.2.zip
unzip 下载的文件
rm –rf *.zip
mv elasticsearch/ ik
以确认是否安装好了分词器
cd ../bin
elasticsearch plugin list:即可列出系统的分词器

(2)测试分词器
使用默认,请观察结果

POST _analyze
{ 
	"text": "我是中国人"
}

使用分词器,请观察结果

POST _analyze
{ 
	"analyzer": "ik_smart", "text": "我是中国人"
}

具体使用技巧参考以下链接:ik分词器github链接

五、Elasticsearch-Rest-Client

1)、9300:TCP
spring-data-elasticsearch:transport-api.jar:

  • springboot 版本不同, transport-api.jar 不同,不能适配 es 版本
  • 7.x 已经不建议使用,8 以后就要废弃

2)、9200:HTTP

  • JestClient:非官方,更新慢
  • RestTemplate:模拟发 HTTP 请求,ES 很多操作需要自己封装,麻烦
  • HttpClient:同上
  • Elasticsearch-Rest-Client:官方 RestClient,封装了 ES 操作,API 层次分明,上手简单

最终选择 Elasticsearch-Rest-Client(elasticsearch-rest-high-level-client)
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html

1、SpringBoot 整合

<dependency>
	<groupId>org.elasticsearch.client</groupId>
	<artifactId>elasticsearch-rest-high-level-client</artifactId>
	<version>8.12</version>
</dependency>

2、配置

@Bean
RestHighLevelClient client() {
RestClientBuilder builder = RestClient.builder(new HttpHost("自己的虚拟机地址", 9200, "http"));
	return new RestHighLevelClient(builder);
}

3、使用

参照官方文档:文章来源地址https://www.toymoban.com/news/detail-841695.html

@Test
void test1() throws IOException {
	Product product = new Product();
	product.setSpuName("华为");
	product.setId(10L);
	IndexRequest request = new IndexRequest("product").id("20")
	.source("spuName","华为","id",20L);
	try {
		IndexResponse response = client.index(request, RequestOptions.DEFAULT);
		System.out.println(request.toString());
		IndexResponse response2 = client.index(request, RequestOptions.DEFAULT);
	} catch (ElasticsearchException e) {
		if (e.status() == RestStatus.CONFLICT) {
		}
	}
}

到了这里,关于ElasticSearch简介及常见用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch7基础用法及java中使用

    GET、POST、PUT、DELETE、HEAD。 id content 1001 my name is zhang san 1002 i name is li si 1003 my name is wang wu keyword id name 1001,1002,1003 zhang 1001a my 1001,1003 PUT请求:http://127.0.0.1:9200/索引名称 返回值: 表头 含义 health 当前服务器健康状态: green (集群完整) yellow (单点正常、集群不完整) red(单点不正

    2024年02月03日
    浏览(36)
  • Elasticsearch 聚合查询(aggs),java后端面试常见问题

    分组完成以后,我们一般会对组中的数据进行聚合运算,例如求平均值、最大、最小、求和等,这些在ES中称为 度量 比较常用的一些度量聚合方式: Avg Aggregation :求平均值 Max Aggregation :求最大值 Min Aggregation :求最小值 Percentiles Aggregation :求百分比 Stats Aggregation :同时返

    2024年04月28日
    浏览(46)
  • 【Elasticsearch学习笔记五】es常用的JAVA API、es整合SpringBoot项目中使用、利用JAVA代码操作es、RestHighLevelClient客户端对象

    目录 一、Maven项目集成Easticsearch 1)客户端对象 2)索引操作 3)文档操作 4)高级查询 二、springboot项目集成Spring Data操作Elasticsearch 1)pom文件 2)yaml 3)数据实体类 4)配置类 5)Dao数据访问对象 6)索引操作 7)文档操作 8)文档搜索 三、springboot项目集成bboss操作elasticsearch

    2023年04月09日
    浏览(51)
  • ElasticSearch-学习笔记02【ElasticSearch索引库维护】

    Java后端-学习路线-笔记汇总表【黑马程序员】 ElasticSearch-学习笔记01【ElasticSearch基本介绍】 【day01】 ElasticSearch-学习笔记02【ElasticSearch索引库维护】 ElasticSearch-学习笔记03【ElasticSearch集群】 ElasticSearch-学习笔记04【Java客户端操作索引库】 【day02】 ElasticSearch-学习笔记05【Spri

    2024年02月04日
    浏览(45)
  • ElasticSearch学习笔记(狂神说)

    视频地址:https://www.bilibili.com/video/BV17a4y1x7zq 在学习ElasticSearch之前,先简单了解一下Lucene: Doug Cutting开发 是apache软件基金会 jakarta项目组的一个子项目 是一个开放源代码的全文检索引擎工具包 不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询

    2024年02月04日
    浏览(47)
  • Elasticsearch基础学习笔记

    目录 一、全文搜索 1,数据分类 2,搜索分类: 3,什么是全文搜索 全文检索是指: 倒排索引 二、ElasticSearch简介 1,ElasticSearch是什么 2,ElasticSearch特点: 3,ElasticSearch版本特性: 4,Elastic生态圈--Elastic Stack介绍 5,ElasticSearch应用场景 6,ElasticSearch单机版部署安装 1,环境

    2024年02月03日
    浏览(32)
  • 【ElasticSearch】学习笔记

    感谢狂神老师的奉献 笔记记录 B站狂神说Java的ElasticSearch课程: 狂神老师上课视频 Elaticsearch,简称为es,es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用

    2023年04月08日
    浏览(32)
  • ElasticSearch 学习、实践笔记

    1. 索引(Index) :索引是 Elasticsearch 中最基本的数据存储单位,类似于关系型数据库中的数据库。一个索引可以包含多个文档,每个文档都有一个唯一的 ID,用于标识该文档。索引可以被分为多个分片,每个分片可以存储一部分文档数据。  2. 文档(Document) :文档是 Elast

    2024年01月23日
    浏览(49)
  • Elasticsearch学习笔记(1)

    Elasticsearch是一个开源的搜索引擎,主要应用于文章解锁中,如在购物网站搜索物品时快速查找到目标,Elasticsearch的建立是基于一个一个的索引库,与mysql的数据库有些许类似的地方 –name设置容器名称 -e设置环境变量,这里设置的内存大小和是否为集群模式 -v设置数据卷挂载

    2024年04月11日
    浏览(34)
  • ES(elasticSearch学习笔记)

    es是面向文档型的数据库,一条数据在es数据库就是一个文档,和关系型数据库做一个类比: 1:es的索引类比关系型数据库的数据库, 2:es的type类比数据表( 7.0版本以上删除了type这个概念 ), 3:es的索引下的文档document类比关系型数据库的行,新增时可以指定文档主键id

    2023年04月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包