首页 > 其他分享 >ElasticSearch知识点小记

ElasticSearch知识点小记

时间:2024-10-29 21:09:05浏览次数:6  
标签:知识点 name index doc 索引 文档 ElasticSearch id 小记

ElasticSearch索引的基本操作

#创建索引
PUT /index_name
可以初始不定义
{
	"settings":{
		//索引设置
		"number_of_shards": "1",//索引的分片书决定了索引的并行度和数据分布 不可以动态修改
		"number_of_replicas": "1",//副本的数量提高了数据的可用性和容错能力 可以动态修改
	},
	"mappings":{
		//字段映射
		"properties": {
			"field1":{
				"type":"keyword"
			},
			"field2":{
				"type":"text",
				"analyzer":"ik_max_word",
				"search_analyzer":"ik_smart"
			},
		}
	}
}
#删除索引
DELETE /index_name

#查询索引
GET /index_name
GET  /index_name/_settings
GET /index_name/_mappings

#修改索引
PUT  /index_name/_settings
PUT /index_name/_mappings

#索引别名
#应用场景
1.在正在运行的集群上进行不同索引切换
2.多个索引分组组合
#创建索引时候指定别名
{
"aliases":{
	"alias_name":{}
}
"settings":{}
}
#现有索引添加别名
post /aliases
{
"actions":{
	"add":{
		"index":"index_name",
		"alias":"alias_name"
	}
}
}
#使用别名
访问Get alias_name

#多索引检索方案
逗号隔开
get index_name,index1_name/_search
通配符
get index_name_2024*/_search

ElasticSearch文档的基本操作

#新增文档
不指定id存在幂等性问题
post  /index/_create/id
{
"field":{}
}
#批量新增文档
支持在一次api调用中,对不同的索引进行操作
操作中单条操作失败,不会影响其他操作
返回结果中包括了每一条的执行结果
post /_bulk 
post /{index}/_bulk
post /{index}/{type}/_bulk

request
{ "index" : { "_index" : "test", "_type" : "_doc", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_type" : "_doc", "_id" : "2" } }
{ "create" : { "_index" : "test", "_type" : "_doc", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_type" : "_doc", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }

response
{"took": 30,"errors": false,"items": [
//index 用于创建新文档或替换已有旧文档
{"index": {"_index": "test","_type": "_doc","_id": "1","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"status": 201,"_seq_no" : 0,"_primary_term": 1}
},
//delete 用于删除现有文档
{"delete": {"_index": "test","_type": "_doc","_id": "2","_version": 1,"result": "not_found","_shards": {"total": 2,"successful": 1,"failed": 0},"status": 404,"_seq_no" : 1,"_primary_term" : 2}
},
//create 如果文档不存在则创建,如果文档已存在则返回错误
{"create": {"_index": "test","_type": "_doc","_id": "3","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"status": 201,"_seq_no" : 2,"_primary_term" : 3}
},
//用于更新现有文档
{"update": {"_index": "test","_type": "_doc","_id": "1","_version": 2,"result": "updated","_shards": {"total": 2,"successful": 1,"failed": 0},"status": 200,"_seq_no" : 3,"_primary_term" : 4}
}
]
}
#查询分词结果
post _analyze
{
	"analyzer":"ik_max_word",
	"text":"value"
}
#查询文档
根据id查询
get /index_name/_doc/id
同时查询多个id
get index_name/_mget
{
  "ids":[id1,id2...]
}
条件匹配文档
GET /index_name/_search
{
	"query":{
		//匹配所有文档
		"match_all":{},
		//文本字段匹配(全文检索)
		"match":{
			"field_name":"value"
		},
		//精确匹配
		"term":{
			"field_name":"value"
		},
		//范围查询
		"range":{
			"field_name":{
				"gte":"lower_bound",
				"lte":"upper_bound"
			}
		}
	}
}
#删除文档
单个删除
delete /index_name/_doc/id
批量删除
post _bulk
{"delete":{"_index":"index_name","_id":"value"}}
{"delete":{"_index":"index_name","_id":"value1"}}
条件查询删除
post /index_name/_delete_by_query
{
	"query":{
		"<your_query>"
	}
}
#更新文档
单个更新
post index/_update/1
{
	"doc":{
		"field":"value"
	}
}
并发控制
post /index_name/_doc/id?if_seq_no=1&if_primary_term=3

批量更新
post _bulk
{ "update" : {"_id" : "1", "_type" : "_doc", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
post /index_name/_update_by_query
{
	"query":{
		"<your_query>"
	},
	"script":{
		"source":"ctx._source.field=value"
	}
}

Elasticsearch文档建模最佳实践

#嵌套对象(Nested Object)
适用于对少量,子文档偶尔更新,查询频繁的场景
允许对象数组中的对象被独立索引
在内部,Nested文档会被保存在两个Lucene文档中,在查询时做join处理

#Join父子文档类型
适用子文档更新频繁
Join类型用在同一索引的文档中创建父子关系
父文档和子文档是独立的两个文档
父文档和子文档必须在相同的分片上,能够确保查询join的性能
当指定子文档时,必须指定他的父文档id,使用routing参数来保证,分配到相同的分片上

#宽表冗余存储
宽表适用于一对多或者多对多的关联关系
#业务端关联
适用于数据量少的多表关联业务场景
#最佳实践
##如何处理关联关系
object:优先考虑反范式
Nested:当数据包含多数值对象,同时有查询需求
Child/parent:关联文档更新非常频繁时

##避免过多字段
一个文档中,避免大量的字段
过多的字段不容易维护
Mapping信息不保存在Cluster State中,数据量过大,对集群性能会有影响
删除或者修改数据需要reindex

默认最大字段数是1000,可以通过index.mapping.total_fields.limit规定最大字段数

生产环境中,尽量在mapping的dynamic字段中配置strict严格控制新增字段的加入(设置为true时,未知字段会被自动加入;设置为false时,新字段不会被索引,但会保存在_source)

对于多属性的字段,可以考虑适用Nested


避免正则、通配符、前缀查询
属于term查询,性能不够好

避免空值引起的聚合不准
mapping时添加配置字段的属性null_value:0

为索引的mapping加入meta信息
功能:搜索、聚合、排序
性能:存储、内存、搜索的性能
mapping添加_meta属性的index_version_mapping的字段


ElasticSearch复杂查询

问题

Can't update non dynamic settings [[index.analysis.filter

# 关闭索引
POST index/_close

# 设置分词器
PUT index/_settings
{"index": {
               
            }
}

# 开启索引
POST index/_open

标签:知识点,name,index,doc,索引,文档,ElasticSearch,id,小记
From: https://www.cnblogs.com/BitX/p/18513097

相关文章

  • ElasticSearch - Bucket Script 使用指南
    文章目录官方文档BucketScript官文1.什么是ElasticSearch中的BucketScript?2.适用场景3.BucketScript的基本结构4.关键参数详解5.示例官方示例:计算每月T恤销售额占总销售额的比率百分比示例计算:点击率(CTR)6.注意事项与限制7.最佳实践官方文档ht......
  • Groovy语言知识点简要介绍
    语法规则##注释**单行**注释使用//在该行的任==何位==置来识别。**多行**注释标识与在开始/*和*/识别多行注释的末尾。##分号像Java编程语言,它需要具有**分号**在Groovy定义多个语句之间进行区分。##关键字###除java之外的特殊数字类型定义,如:BigInteg......
  • C#01-C#知识点
    @目录0.什么是C#?1.什么是类?2.面向对象编程的主要概念是什么?3.什么是对象?4.什么是构造函数,它有哪些不同的类型?5.C#中的析构函数是什么?6.C#代码是托管代码还是非托管代码?7.什么是值类型和引用类型?8.什么是命名空间,它是强制性的吗?9.用例子解释C#中的注释类型10.请解释封装11.什......
  • C++ 网络编程 IO多路复用、select、poll、epoll知识点总结
    1.什么是I/O多路复用?I/O多路复用(I/OMultiplexing)是一种编程技术,允许一个线程或进程同时管理多个I/O通道(如文件描述符、套接字等)。它使得单个进程能够在不使用多个线程或进程的情况下,同时处理多个I/O操作。这在网络编程和高性能服务器中尤为重要,因为它可以有效地利用系......
  • 三维变换矩阵知识点
    一、行矩阵与列矩阵、行主序与列主序行主序和列主序影响如何在内存中访问和存储矩阵数据,与行矩阵和列矩阵的概念没有直接的关系行矩阵与列矩阵:行矩阵:        $$\begin{pmatrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{pmatrix}$$列矩阵:指的是矩阵的元......
  • python知识点100篇系列(23)- 使用stylecloud生成词云
    使用stylecloud生成词云stylecloud是wordcloud优化版,相对来说操作更简单;一个很方便的功能是,可以使用FontAwesome提供的免费图标更改词云的形状;FontAwesome提供的免费图标库参考这里安装所需库主要是安装一下分词用到的jieba和生成词云使用的stylecloud安装方式......
  • 【项目实战】分布式日志搜索系统之数据同步方案(Logstash-input-jdbc、go-mysql-elast
    在构建分布式日志搜索系统时,数据同步是一个核心环节。以下是针对您提出的五种数据同步方案的详细分析:一、Logstash-input-jdbcLogstash是ElasticStack的一部分,用于从各种来源收集数据,并将其发送到Elasticsearch。Logstash-input-jdbc插件允许Logstash从关系型数据库(如My......
  • Rust整合Elasticsearch
    Elasticsearch是什么Lucene:Java实现的搜索引擎类库易扩展高性能仅限Java开发不支持水平扩展Elasticsearch:基于Lucene开发的分布式搜索和分析引擎支持分布式、水平扩展提高RestfulAPI,可被任何语言调用ElasticStack是什么ELK(ElasticStack):Elasticsearch结合Kibana、Log......
  • elasticsearch使用
    1、选择1、ElasticsearchRestTemplate是spring对官方HighLevelRESTClient的封装。2、ElasticSearch8.x弃用了HighLevelRESTClient,移除了JavaTransportClient,推荐使用ElasticsearchJavaAPI(后续使用8的建议使用ElasticsearchJavaAPI)2、ElasticsearchRestTemp......
  • 大数据技术知识点小结
     一、数据采集 1. 数据源:包括结构化数据(如数据库中的数据)、半结构化数据(如XML、JSON等)和非结构化数据(如文本、图像、音频、视频等)。2. 采集工具:如Flume、Sqoop等,用于从不同的数据源抽取数据并传输到大数据存储系统中。 二、数据存储 1. Hadoop分布式文件系......