小蔡学Java

Elasticsearch简单入门

2023-09-29 20:15 1126 0 Redis及非关系型数据库 ElasticSearch非关系型数据库

一、Elasticsearch简介

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。

二、Elasticsearch相关概念

Elasticsearch具有映射(mapping)、索引(index)、类型(type)、文档(document)、副本和分片等概念。

索引表示一类数据的结构,类似关系型数据库中数据表结构的概念,但是并不规定这类数据中的所有结构都相同

映射是给索引定义的结构设置类型等配置,比如字段数据结构类型和是否开启索引等,映射只能添加字段配置,不可修改字段配置

类型是用来在逻辑上给索引中的所有数据划分成多个部分,在7.x及以上版本删掉这一概念,类型统一定义为 _doc 类型

文档Elasticsearch存储的一个个数据对象就是文档,并且这些数据对象是JSON结构的,类型关系型数据库中一行数据的概念,文档中的每个字段都可以被索引。一个索引中的所有文档的ID都应该是不同的。

副本就是文档的冗余存储,是存储多几份文档数据

分片就是给文档数据划分成多份数据,并且每份数据存储在不同的地方

三、基本操作

对Elasticsearch服务器执行相关数据操作时,可以发送HTTP或者HTTPS请求,也可以使用Kibana执行相关命令,在使用Kibana执行数据操作时,Kibana版本需要与Elasticsearch版本相对应。以下相关操作基于Eibana7.17.17和Elasticsearch7.17.17。

1、索引基本操作

创建名称为user的索引

PUT /user

响应:

	{
	  "acknowledged" : true,
	  "shards_acknowledged" : true,
	  "index" : "user"
	}

查看名称为name索引信息

GET /user

响应

	{
	  "user" : { # 索引名称
		"aliases" : { }, # 索引别名
		"mappings" : { }, # 索引映射
		"settings" : { # 索引配置
		  "index" : {
			"routing" : {
			  "allocation" : {
				"include" : {
				  "_tier_preference" : "data_content"
				}
			  }
			},
			"number_of_shards" : "1", # 分片数量
			"provided_name" : "user",
			"creation_date" : "1708869404053",
			"number_of_replicas" : "1", # 副本数量
			"uuid" : "7CTQFVh1QOmjZ3bopH-gQA",
			"version" : {
			  "created" : "7171799"
			}
		  }
		}
	  }
	}

删除名称为user的索引

DELETE /user

响应

	{
	  "acknowledged" : true
	}

获取全部索引

	方式一:
	GET /_all
	方式二:
	GET /_cat/indices?v

判断名称为user的索引是否存在

	# 状态码为200表示存在,404表示不存在
	HEAD /user

2、映射基本操作

给名称为user的索引配置映射

	POST /user/_mapping
	{ # 响应体
	  "properties": {
		"name": { # 索引字段名称
		  "type": "text" # 字段数据结构
		},
		"age": { # 索引字段名称
		  "type": "long" # 字段数据结构
		}
	  }
	}

响应

	{
	  "acknowledged" : true
	}

查看名称为user的索引映射配置

	GET /user/_mapping

响应

	{
	  "user" : {
		"mappings" : {
		  "properties" : {
			"age" : {
			  "type" : "long"
			},
			"name" : {
			  "type" : "text"
			}
		  }
		}
	  }
	}

获取所有映射配置

	方式一:
	GET /_mapping
	方式二:
	GET /_all/_mapping

**向映射配置中新增字段配置,**如果需要删除映射配置,只能删除索引

	POST /user/_mapping
	{
	  "properties": {
		"school": {
		  "type": "text"
		}
	  }
	}

响应

	{
	  "acknowledged" : true
	}

3、文档基本操作

添加文档

	PUT /user/_doc/111
	{
	  "name": "zhansang",
	  "age": 18,
	  "school": "华南理工大学"
	}

响应

	{
	  "_index" : "user",
	  "_type" : "_doc",
	  "_id" : "111",
	  "_version" : 1,
	  "result" : "created",
	  "_shards" : {
		"total" : 2,
		"successful" : 1,
		"failed" : 0
	  },
	  "_seq_no" : 0,
	  "_primary_term" : 2
	}

获取文档

GET /user/_doc/111

响应

	{
	  "_index" : "user",
	  "_type" : "_doc",
	  "_id" : "111",
	  "_version" : 1,
	  "_seq_no" : 0,
	  "_primary_term" : 2,
	  "found" : true,
	  "_source" : {
		"name" : "zhansang",
		"age" : 18,
		"school" : "华南理工大学"
	  }
	}

修改文档

	方式一:使用添加文档操作来对文档进行全部字段修改
	方式二:对文档部分字段进行修改或添加字段
	POST /user/_update/111
	{
	  "doc": {
		"age": 19
	  }
	}

删除文档字段

	POST /user/_update/111
	{
	  "script": "ctx._source.remove(\"class\")"
	}

查看指定文档

	GET /user/_doc/111

评论( 0 )

  • 博主 Mr Cai
  • 坐标 河南 信阳
  • 标签 Java、SpringBoot、消息中间件、Web、Code爱好者

文章目录