Elasticsearch知识点表格总结

news/2024/5/7 22:36:48

         最近其实有点忙,在主攻Django项目和go语言项目,所以只能利用下班晚上和周末总结一些知识点,因为最近的公司的项目没有用上Elasticsearch,所以总结一下,方便以后复习,以及以后面试会用上,不然过段时间,这些知识点都遗忘了。

目录

 1.Elasticsearch 的定义

 2.  Elasticsearch数据类型概览

4.Elasticsearch映射(Mapping)和索引(Index)设置

5.Elasticsearch查询DSL(Domain Specific Language)

6. Elasticsearch聚合(Aggregations)操作

7.Elasticsearch高亮(Highlighting)

8. Elasticsearch排序(Sorting)

9. Elasticsearch索引刷新与写入性能

10. Elasticsearch安全与权限(Security and Authorization)

11. Elasticsearch监控与日志(Monitoring and Logging)

12.Elasticsearch集群管理(Cluster Management)

13.Elasticsearch索引别名(index Alias)

14.Elasticsearch索引末班与模式(Index Templates and Patterns)

15. Elasticsearch搜索操作(Search Operations)

16.Elasticsearch批量操作(Bulk Operations)

17.Elasticsearch搜索结果解析(Search Result Parsing)

18.Elasticsearch插件生态系统(Plugins Ecosystem)

19. Elasticsearch集群状态与维护

20. Elasticsearch灾难恢复与备份

21.Elasticsearch性能优化


 1.Elasticsearch 的定义

    Elasticsearch 是一个分布式、RESTful 风格的搜索与数据分析引擎。它可以用于全文搜索、结构化搜索以及分析;Elasticsearch 可以被用于构建实时搜索引擎,如电商网站的产品搜索功能。

 2.  Elasticsearch数据类型概览
数据类型分类数据类型描述示例
核心数据类型string (text/keyword)text 用于全文搜索,keyword 用于精确匹配。"content": {"type": "text"}
numeric包括 byteshortintegerlong 等。"age": {"type": "integer"}
date日期类型,用于存储日期和时间。"date": {"type": "date"}
boolean布尔类型,用于存储真值或假值。`"is_published": {"type": "boolean"}
binary二进制数据类型。"file": {"type": "binary"}
范围数据类型range包括 integer_rangefloat_rangedate_range 等。"age_range": {"type": "integer_range"}
复杂数据类型object用于存储结构化数据,如 JSON 对象。"user": {"type": "object"}
nested嵌套对象,允许对内嵌数据进行索引和搜索。"comments": {"type": "nested"}
地理数据类型geo_point存储地理位置的经纬度。"location": {"type": "geo_point"}
geo_shape存储地理形状,如多边形。"shape": {"type": "geo_shape"}
专门数据类型ip用于存储 IP 地址。"ip": {"type": "ip"}
token_count用于统计字段中的词项数量。"word_count": {"type": "token_count"}
completion用于自动完成功能的字段。"suggest": {"type": "completion"}

       

3.Elasticsearch的分析器(Analyzers)和分词器(Tokenizer)

组件描述示例
分析器(Analyzer)用于将文本转换为可搜索的项(tokens)。包括字符过滤器、分词器和词元过滤器。"analyzer": {"my_custom_analyzer": {"type": "standard"}}
分词器(Tokenizer)将文本分解成单个或多个词条(terms)。"tokenizer": {"my_custom_tokenizer": {"type": "whitespace"}}
词元过滤器(Token Filter)对分词器生成的词条进行转换或修改。"filter": {"my_custom_filter": {"type": "lowercase"}}
标准分析器(Standard Analyzer)默认分析器,适用于大多数文本。"analyzer": {"default": {"type": "standard"}}
简单分析器(Simple Analyzer)基于词元的边界分词,不使用词元过滤器。"analyzer": {"my_simple_analyzer": {"type": "simple"}}
停用词过滤(Stop Token Filter)移除常见的停用词,如“and”、“the”等。"filter": {"my_stop_filter": {"type": "stop", "stopwords": ["and", "the"]}}

分析器在索引文档时用于文本字段的分析,Tokenizer 用于将文本分解成词条,而 Token Filter 用于进一步处理这些词条,例如小写化、同义词处理或删除停用词。

示例:

假设我们有一个博客平台,需要对用户提交的帖子内容进行索引,以便于后续的搜索。我们可能会定义一个自定义分析器,如下所示:

PUT /my_blog_index
{"settings": {"analysis": {"analyzer": {"my_custom_analyzer": {"type": "standard","stopwords": ["a", "an", "the"] // 自定义停用词列表}}}},"mappings": {"properties": {"content": {"type": "text","analyzer": "my_custom_analyzer"}}}
}

在这个示例中,我们创建了一个名为 my_blog_index 的新索引,并定义了一个自定义的标准分析器 my_custom_analyzer,它使用了一个自定义的停用词列表。然后,我们将这个分析器应用到了 content 字段上。

4.Elasticsearch映射(Mapping)和索引(Index)设置
概念描述示例
映射(Mapping)定义文档中每个字段的数据类型和相关的属性,如是否可搜索、是否存储等。"mappings": {"properties": {"title": {"type": "text"}}}
索引(Index)存储数据的结构,类似于关系型数据库中的“表”。"settings": {"index": {"number_of_shards": 3}}}
分片(Shards)一个索引可以被分成多个分片以分布数据和提高查询性能。如上例
副本(Replicas)每个分片可以有多个副本以提供高可用性和读取性能。"settings": {"index": {"number_of_replicas": 2}}}
全文搜索(Full-Text Search)利用 text 类型字段进行全文搜索。"query": {"match": {"content": "Elasticsearch"}}
精确搜索(Exact Search)利用 keyword 类型字段进行精确匹配搜索。"query": {"term": {"category.keyword": "finance"}}
多字段(Multi-fields)一个字段可以定义为多个类型的字段,以支持不同的搜索需求。"properties": {"title": {"type": "text", "fields": {"raw": {"type": "keyword"}}}}

示例:

假设我们正在设计一个新闻文章的索引,并且我们希望文章的标题能够支持全文搜索,同时支持基于标题的精确匹配搜索,如下所示:

PUT /news_index
{"settings": {"index": {"number_of_shards": 3,"number_of_replicas": 2}},"mappings": {"properties": {"title": {"type": "text","analyzer": "standard","fields": {"raw": {"type": "keyword"}}},"content": {"type": "text"},"publication_date": {"type": "date"},"category": {"type": "keyword"}}}
}

在这个示例中,我们创建了一个名为 news_index 的新索引,并设置了3个主分片和2个副本。文章的 title 字段被定义为 text 类型以支持全文搜索,并且通过 fields 定义了一个名为 raw 的子字段,它是 keyword 类型,用于支持精确匹配搜索。content 字段同样被定义为 text 类型,而 publication_datecategory 分别被定义为 datekeyword 类型。

5.Elasticsearch查询DSL(Domain Specific Language)
查询类型描述示例
Match Query用于在 text 类型字段上执行全文搜索。"query": {"match": {"content": "Elasticsearch"}}
Term Query用于在 keyword 类型字段上执行精确值匹配。"query": {"term": {"category.keyword": "finance"}}
Range Query用于查找数值或日期类型字段在指定范围内的文档。"query": {"range": {"age": {"gte": 18}}}
Bool Query组合多个查询,支持 mustshouldmust_notfilter"query": {"bool": {"must": [{"match": {"content": "Elasticsearch"}}]}}
Prefix Query用于查找以特定前缀开始的 text 或 keyword 类型字段的文档。"query": {"prefix": {"title.keyword": "fin"}}
Wildcard Query支持使用通配符(* 和 ?)进行搜索。"query": {"wildcard": {"user.keyword": "j*"}}
Fuzzy Query允许搜索拼写错误的词条。"query": {"fuzzy": {"title.keyword": "elasticsearche"}}
Regexp Query使用正则表达式进行搜索。"query": {"regexp": {"title.keyword": "elast.*"}}
Aggregations用于执行数据分析和统计。"aggs": {"avg_price": {"avg": {"field": "price"}}}

示例:

假设我们想要在新闻文章索引中搜索有关 "Elasticsearch" 的文章,并且希望结果按照发布日期排序,同时获取这些文章的平均阅读量:

GET /news_index/_search
{"query": {"match": {"content": "Elasticsearch"}},"sort": [{"publication_date": {"order": "desc"}}],"aggs": {"average_article_views": {"avg": {"field": "article_views"}}}
}

在这个示例中,我们使用了 match 查询来搜索包含 "Elasticsearch" 的文章。sort 用于按照 publication_date 字段降序排序结果。aggs 中的 average_article_views 聚合用于计算所有匹配文档的平均阅读量

6. Elasticsearch聚合(Aggregations)操作
聚合类型描述示例
Avg计算数值字段的平均值。"aggs": {"avg_price": {"avg": {"field": "price"}}}
Sum计算数值字段的总和。"aggs": {"total_sales": {"sum": {"field": "price"}}}
Min找出数值字段的最小值。"aggs": {"min_price": {"min": {"field": "price"}}}
Max找出数值字段的最大值。"aggs": {"max_price": {"max": {"field": "price"}}}
Stats计算数值字段的多个统计值,包括最小值、最大值、平均值和总和。"aggs": {"price_stats": {"stats": {"field": "price"}}}
Extended Stats提供额外的统计度量,如标准偏差和方差。"aggs": {"price_extended_stats": {"extended_stats": {"field": "price"}}}
Value Count计算字段中不重复值的数量。"aggs": {"unique_titles": {"value_count": {"field": "title.keyword"}}}
Terms对字段的唯一值进行聚合,通常用于桶聚合。"aggs": {"categories": {"terms": {"field": "category.keyword"}}}
Range根据指定的范围对数值或日期字段进行分组。"aggs": {"price_ranges": {"range": {"field": "price", "ranges": [{"from": 0, "to": 100}, {"from": 100, "to": 200}]}}
Date Histogram按日期范围对日期字段进行分组,通常用于时间序列数据。"aggs": {"publication_years": {"date_histogram": {"field": "publication_date", "calendar_interval": "year"}}}}
Nested对嵌套对象内的文档执行聚合。"aggs": {"nested_agg": {"nested": {"path": "comments"}, "aggs": {"avg_score": {"avg": {"field": "comments.score"}}}}}

示例:

假设我们有一个电子商务网站的索引,我们想要聚合出所有商品的平均价格、总销量以及按类别分桶的统计信息:

GET /ecommerce_index/_search
{"size": 0, // 不返回匹配的文档,只返回聚合结果"aggs": {"average_price": {"avg": {"field": "price"}},"total_sales": {"sum": {"field": "sales"}},"categories_stats": {"terms": {"field": "category.keyword"},"aggs": {"avg_price_per_category": {"avg": {"field": "price"}}}}}
}

在这个示例中,我们使用 avg 聚合来计算所有商品的平均价格,使用 sum 聚合来计算总销量。同时,我们使用 terms 聚合按商品类别进行分组,并在每个桶内使用嵌套的 avg 聚合来计算每个类别商品的平均价格。

7.Elasticsearch高亮(Highlighting)
高亮类型描述示例
高亮查询(Highlight Query)用于在返回的搜索结果中突出显示匹配的部分。"highlight": {"fields": {"content": {}}}
前缀高亮(Prefix Highlight)与高亮查询类似,但可以为每个词条添加前缀。"highlight": {"pre_tags": ["<tag1>"], "post_tags": ["</tag1>"], "fields": {"content": {"pre_tags": ["[H]"], "post_tags": ["[/H]"]}}}
高亮器(Highlighter)指定用于高亮的算法或方法。"highlight": {"highlighter": "fvh", "fields": {"content": {}}}
自定义高亮(Custom Highlight)允许自定义高亮的前缀和后缀标签。"highlight": {"pre_tags": ["<custom>"], "post_tags": ["</custom>"], "fields": {"content": {}}}
多字段高亮(Multi-field Highlight)对文档中的多个字段进行高亮。"highlight": {"fields": {"content": {}, "title": {}}}

示例:

假设我们正在搜索有关 "Elasticsearch" 的文章,并且我们希望在搜索结果中的内容字段和标题字段中高亮显示匹配的词条:

GET /news_index/_search
{"query": {"match": {"content": "Elasticsearch"}},"highlight": {"pre_tags": ["<highlight>"], "post_tags": ["</highlight>"], "fields": {"content": {},"title": {}}}
}

在这个示例中,我们使用了 match 查询来搜索包含 "Elasticsearch" 的文章。highlight 部分定义了自定义的高亮前缀 <highlight> 和后缀 </highlight>,并指定了要高亮的字段 contenttitle

8. Elasticsearch排序(Sorting)
排序类型描述示例
普通排序(Simple Sort)根据一个字段进行升序或降序排序。"sort": {"price": {"order": "asc"}}
多级排序(Multi-level Sort)可以基于多个字段进行排序,类似于 SQL 中的 ORDER BY"sort": [{"price": {"order": "asc"}}, {"_score": {"order": "desc"}}]
脚本排序(Script Sort)使用脚本进行排序,提供排序的灵活性。"sort": {"_script": {"script": {"lang": "painless", "source": "doc['price'].value"}}}
地理距离排序(Geo Distance Sort)根据与地理点的距离进行排序。"sort": {"_geo_distance": {"location": [40.73, -74.1], "order": "asc", "unit": "km"}}

示例:

假设我们想要搜索新闻文章,并按照文章的发布日期进行降序排序,同时在分数相同的情况下按照文章标题的字典顺序进行升序排序:

GET /news_index/_search
{"query": {"match_all": {}},"sort": [{"publication_date": {"order": "desc"}},{"title.keyword": {"order": "asc"}}]
}

在这个示例中,我们使用了 match_all 查询来搜索所有文档,并按照 publication_date 字段进行降序排序,然后对于排序结果相同的文档,按照 title.keyword 字段进行升序排序。

9. Elasticsearch索引刷新与写入性能
概念描述示例
索引刷新(Index Refresh)控制索引操作何时变为可见,影响搜索性能。"settings": {"index": {"refresh_interval": "1m"}}
写入性能(Write Performance)优化写入性能,包括批量操作和写入合并。使用 bulk API 进行批量索引操作
合并(Merge)控制索引的后台合并操作,影响存储和搜索性能。"settings": {"index": {"merge.policy": {"floor_segment": "50mb"}}}
存储类型(Storage Type)索引的存储类型,影响索引的读写性能。"settings": {"index": {"store": {"type": "mmapfs"}}}
索引存储(Index Store)控制索引元数据的存储方式,优化性能。"settings": {"index": {"store": {"index": {"store": "niofs"}}}}
强制合并(Force Merge)强制立即合并所有分片,用于优化存储使用。POST /index_name/_forcemerge

示例:

假设我们有一个日志索引,我们希望减少索引的刷新间隔,以便更快地看到新的搜索结果:

PUT /log_index
{"settings": {"index": {"refresh_interval": "5s" // 刷新间隔设置为5秒}}
}

在这个示例中,我们将 refresh_interval 设置为5秒,这样索引操作会在每5秒后变为可见,从而加快搜索结果的更新速度。

10. Elasticsearch安全与权限(Security and Authorization)
功能描述示例
角色(Roles)定义一组权限,可以分配给一个或多个用户。POST /_security/role/marketing_role
用户(Users)创建具有特定角色的用户账户。POST /_security/user/john
权限(Privileges)控制用户对索引和文档的操作权限,如读(read)、写(write)和删除(delete)。在角色中指定权限:".indices": {"privileges": ["read", "write"]}
认证(Authentication)验证用户身份的过程,通常使用 X-Pack 或内置的基本认证。通过 HTTP 基本认证与 Elasticsearch 通信
授权(Authorization)根据用户的角色和权限控制对资源的访问。分配用户到具有特定索引权限的角色
TLS/SSL用于加密节点间和客户端与 Elasticsearch 集群之间的通信。在配置文件中设置 xpack.security.transport.ssl.enabled
审计日志(Audit Logs)记录安全事件,如用户登录、权限变更等。启用审计日志:xpack.security.audit.enabled

示例:

假设我们需要创建一个角色,该角色具有读取特定索引和写入日志的能力:

POST /_security/role/marketing_role
{"cluster": ["read"],"indices": [{"names": ["marketing_data"],"privileges": ["read", "write"]}]
}

定索引 marketing_data 的读写权限。

接下来,我们将创建一个用户并分配上面定义的角色:

POST /_security/user/john
{"password": "password123","roles": ["marketing_role"],"full_name": "xiaomifeng1010"
}

在这个示例中,我们创建了一个用户名为 xiaomifeng1010 的用户,设置了密码,并分配了 marketing_role 角色。

11. Elasticsearch监控与日志(Monitoring and Logging)
功能描述示例
节点监控(Node Monitoring)跟踪集群中每个节点的状态和性能指标。使用 Elasticsearch 自带的 _cat API,如 _cat/nodes?v
集群监控(Cluster Monitoring)监控整个 Elasticsearch 集群的健康和性能。使用 Elasticsearch 头插件(Elasticsearch Head)或 Kibana
日志管理(Log Management)记录和查看 Elasticsearch 节点的日志信息。访问节点的日志文件,通常位于 /var/log/elasticsearch/
慢查询日志(Slow Query Logs)记录执行时间较长的查询,有助于性能调优。配置 index.search.slowlog.threshold.query.warn
审计日志(Audit Logs)记录安全事件,如用户操作、权限变更等。通过 X-Pack 安全功能启用审计日志
Deprecation Logging记录弃用的功能和设置,帮助你了解升级影响。检查节点的日志文件以查看弃用警告
指标 API(Metrics API)提供集群和节点级别的度量信息,如 CPU 使用率、内存使用量等。使用 _nodes/stats 或 _cluster/stats

示例:

假设我们想要查看集群中所有节点的信息,包括节点的角色和它们的状态:

curl -X GET "localhost:9200/_cat/nodes?v"

在这个示例中,我们使用 _cat/nodes API 来获取节点的详细信息,?v 参数表示启用详细模式。

接下来,我们可能想要监控集群的健康状况和一些关键的度量信息:

curl -X GET "localhost:9200/_cluster/health?pretty"curl -X GET "localhost:9200/_nodes/stats?pretty"

第一个命令用于检查集群的健康状况,第二个命令用于获取节点的统计信息。

12.Elasticsearch集群管理(Cluster Management)
管理任务描述示例
集群健康(Cluster Health)查看集群的状态,包括分片分配和节点信息。GET /_cluster/health
集群设置(Cluster Settings)动态更新集群的某些设置而不需要重启。PUT /_cluster/settings
索引管理(Index Management)创建、删除索引以及管理索引的映射和设置。PUT /my_indexDELETE /my_index
分片分配(Shard Allocation)控制分片在集群中的分配,如将分片移动到特定节点。PUT /_cluster/reroute
节点管理(Node Management)添加或移除节点,查看节点状态。GET /_cat/nodes
快照与恢复(Snapshot and Restore)备份集群状态和索引数据。PUT /_snapshot/my_backupPOST /_snapshot/my_backup/_restore
集群重启(Cluster Restart)重启整个集群或单个节点。POST /_cluster/restart
集群升级(Cluster Upgrade)滚动升级 Elasticsearch 集群。逐步升级节点并等待它们重新加入集群

示例:

假设我们需要检查集群的当前状态,包括每个索引的分片分配情况:

GET /_cluster/health

这个命令将返回集群的健康状态,包括每个索引的分片数量和状态。

接下来,如果我们想要更新集群的某个动态设置,比如禁用交换索引的分配:

PUT /_cluster/settings
{"persistent": {"cluster.routing.allocation.enable": "none"}
}

在这个示例中,我们使用 PUT /_cluster/settings 来更新集群的路由分配设置,将其设置为 "none",这意味着我们禁止了所有新的分片分配。

13.Elasticsearch索引别名(index Alias)
概念描述示例
别名(Alias)别名是对一个或多个索引的引用,用于读取(搜索)和写入(索引)操作。POST /alias_index/_aliases
只读别名(Read Alias)创建指向索引的只读别名,常用于防止别名被用于写入操作。创建别名时不包含写入权限
写入别名(Write Alias)创建指向索引的写入别名,用于索引文档。POST /write_alias/_bulk
别名查询(Alias Query)使用别名进行查询,可以搜索别名指向的所有索引的数据。GET /search_alias/_search
别名更新(Alias Update)更新别名以指向新的索引,而不影响别名的读取和写入操作。POST /_aliases
多索引查询(Multi-Index Query)使用别名查询多个索引的数据,别名可以包含多个索引名。GET /alias_1,alias_2/_search

示例:

假设我们有一个日志索引 logstash-2018.01,我们想要创建一个别名 logs 用于搜索:

POST /logstash-2018.01/_aliases
{"actions": [{"add": {"index": "logstash-2018.01","alias": "logs"}}]
}

在这个示例中,我们使用 _aliases 端点给 logstash-2018.01 索引添加了一个别名 logs

接下来,如果我们想要搜索所有使用 logs 别名的索引中的数据:

GET /logs/_search
{"query": {"match_all": {}}
}

在这个示例中,我们使用别名 logs 来代替具体的索引名进行搜索。

14.Elasticsearch索引末班与模式(Index Templates and Patterns)
概念描述示例
索引模板(Index Template)定义新索引的默认设置,如映射、设置和别名。PUT /_template/my_template
模式匹配(Pattern Matching)索引模板可以使用模式匹配来自动应用到新创建的索引。"index_patterns": ["my-index-*"]
顺序与优先级(Order and Priority)多个索引模板可以存在,Elasticsearch 将根据顺序和优先级选择模板。"order": 1, "priority": 100
动态映射(Dynamic Mapping)控制未知字段的自动映射行为。"dynamic": false
映射定义(Mapping Definitions)定义索引中字段的数据类型和属性。"mappings": {"properties": {"field1": {"type": "text"}}}
设置(Settings)定义索引级别的设置,如分片数、副本数等。"settings": {"number_of_shards": 3}

示例:

假设我们想要为所有以 my-index- 开头的索引定义一个索引模板,模板中包含一个字段映射和一个设置:

PUT /_template/my_template
{"index_patterns": ["my-index-*"],"order": 1,"template": {"settings": {"number_of_shards": 3},"mappings": {"properties": {"field1": {"type": "text"}}}}
}

在这个示例中,我们定义了一个名为 my_template 的索引模板,它将自动应用到所有匹配 my-index-* 模式的索引。该模板设置了分片数为3,并定义了一个 field1 文本字段。

15. Elasticsearch搜索操作(Search Operations)
操作类型描述示例
单索引搜索(Single Index Search)在单个索引上执行搜索。GET /index_name/_search
多索引搜索(Multi-Index Search)同时在多个索引上执行搜索。GET /index_1,index_2/_search
通配符搜索(Wildcard Search)使用通配符(* 和 ?)在多个索引上执行搜索。GET /index_*/_search
搜索体(Search Body)使用请求体中的 JSON 定义复杂的搜索条件。POST /_search with JSON body
搜索结果大小(Size)控制返回的搜索结果数量。GET /_search?size=10
搜索结果从何开始(From)指定搜索结果的偏移量,用于分页。GET /_search?size=10&from=10
版本类型(Version Type)指定文档的版本号,用于处理并发更新。GET /_search with version=true
解析查询(Explain Query)提供为什么某个文档匹配搜索条件的详细信息。GET /_search?explain=true
偏好(Preference)控制文档的排序或分片,以优化搜索性能。GET /_search?preference=_shards:2

示例:

假设我们想要在 index_1index_2 上执行搜索,并指定返回结果的大小和从哪个结果开始:

GET /index_1,index_2/_search?size=5&from=5
{"query": {"match_all": {}}
}

在这个示例中,我们使用 GET 请求在 index_1index_2 上执行搜索,size 参数设置返回结果的数量为5,from 参数设置从第6个结果开始返回。

接下来,我们可能想要执行一个复杂的搜索,使用搜索体中的 JSON 定义查询:

POST /_search
{"query": {"bool": {"must": [{"match": {"field1": "value1"}}],"filter": [{"range": {"field2": {"gte": 10}}}]}}
}

在这个示例中,我们使用 POST 请求执行一个布尔查询,它包含一个必须匹配的 match 查询和一个过滤条件 range 查询。

16.Elasticsearch批量操作(Bulk Operations)
操作类型描述示例
批量索引(Bulk Index)在单个请求中索引多个文档。POST /_bulk with multiple index actions
批量更新(Bulk Update)在单个请求中更新多个文档。POST /_bulk with multiple update actions
批量删除(Bulk Delete)在单个请求中删除多个文档。POST /_bulk with multiple delete actions
批量请求体(Bulk Request Body)请求体包含多个独立的操作,每个操作都有自己的动作和数据。N/A
刷新控制(Refresh Control)控制批量操作后索引的刷新行为。POST /_bulk?refresh=true

示例:

假设我们想要执行一个批量操作,其中包括索引两个文档和一个更新操作:

POST /_bulk
{"index": {"_index": "index_name", "_id": "1"}}
{"field1": "value1", "field2": "value2"}
{"update": {"_index": "index_name", "_id": "2"}}
{"doc": {"field3": "value3"}}
{"index": {"_index": "index_name", "_id": "3"}}
{"field4": "value4"}

在这个示例中,我们使用 _bulk 端点来执行批量操作。请求体包含了三个动作:两个索引操作和一个更新操作。

接下来,如果我们想要在执行批量操作后立即使文档可搜索,可以启用刷新:

POST /_bulk?refresh=true
[ ... bulk actions ... ]

在这个示例中,我们在 _bulk 请求的查询字符串中添加了 ?refresh=true 参数,这将导致每个操作后立即触发索引的刷新。

17.Elasticsearch搜索结果解析(Search Result Parsing)
组件描述示例
命中总数(Total Hits)搜索结果中匹配的文档总数。"hits": {"total": {"value": 10, "relation": "eq"}}
最高分(Max Score)所有匹配文档中最高的相关性分数。"max_score": 1.0
命中列表(Hits)包含单个文档信息的数组。"hits": [{"_id": "1", "_source": {"field1": "value1"}}]
_id(文档ID)匹配文档的唯一标识符。"_id": "1"
_source(源文档)包含文档内容的 JSON 对象。"_source": {"field1": "value1"}
高亮(Highlight)显示搜索词在文档中的高亮部分。"highlight": {"content": ["<em>search</em> term found"]}
解释(Explanation)提供文档得分的详细解释。"_explanation": "BM25: ..."
版本(Version)匹配文档的版本号。"_version": 1

示例:

假设我们执行了一个搜索请求,并且想要获取每个匹配文档的详细信息:

GET /my_index/_search
{"query": {"match_all": {}}
}

响应可能如下:

{"took": 10,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": {"value": 3,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "my_index","_id": "1","_score": 1.0,"_source": {"title": "Document Title","content": "Document content with the search term."},"highlight": {"content": ["Document content with the <em>search</em> term."]},"_explanation": "BM25: k1=1.2, b=0.75, docLen=30, avgdl=25, extDocLen=50, IF(idf(t='search'):3)=2.0, IF(df:3, tf:2)=0.39, _score: 2.0/(1.2+1.2×0.75×0.39)×log(30/50)×1.0=1.0"}]}
}

在这个示例中,搜索结果包括了 took(查询耗时)、timed_out(是否超时)、_shards(分片信息)、hits(命中信息,包括总数、最高分和具体文档列表)等字段。

18.Elasticsearch插件生态系统(Plugins Ecosystem)
插件类型描述示例
监控与可视化(Monitoring & Visualization)提供集群监控和数据可视化的工具。Elastic Stack's Kibana, ElasticHQ
安全插件(Security)增强安全性,如 SSL/TLS 支持和用户认证。X-Pack, Shield
存储与索引(Storage & Index)允许使用不同的存储后端或改变索引行为。Azure, HDFS
传输与集成(Transport & Integration)支持与其他服务或数据源的集成。Logstash, Beats
分析与机器学习(Analytics & Machine Learning)提供数据分析和机器学习功能。Elasticsearch SQL, X-Pack ML
地理空间(Geospatial)增强地理空间数据的处理能力。JTS, Geohash
可扩展性(Scalability)帮助集群水平扩展或优化性能。Elasticsearch-Hadoop

示例:

假设我们想要使用 Kibana 对 Elasticsearch 集群进行监控和数据可视化:

# 安装 Kibana
sudo apt-get install kibana# 启动 Kibana
sudo service kibana start# 访问 Kibana UI
http://localhost:5601

在这个示例中,我们通过包管理器安装了 Kibana,然后启动服务并访问其 Web 界面。

接下来,如果我们想要增强集群的安全性,可能会安装 X-Pack 插件:

# 安装 X-Pack
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install x-pack# 重启 Elasticsearch 以应用插件更改
sudo service elasticsearch restart

在这个示例中,我们使用 Elasticsearch 的插件安装命令安装了 X-Pack,然后重启 Elasticsearch 服务。

19. Elasticsearch集群状态(Cluster Status)与维护(Cluster Maintenance)
操作描述示例
集群健康检查(Cluster Health)查看集群的健康状态,包括分片分配和任务进度。GET /_cluster/health
集群统计信息(Cluster Stats)获取集群的统计信息,如文档数量、索引数量等。GET /_cluster/stats
节点信息(Node Info)查看集群中节点的详细信息,包括节点的角色和状态。GET /_nodes
集群重新路由(Cluster Reroute)手动重新路由分片以优化集群或处理故障。POST /_cluster/reroute
集群更新设置(Cluster Update Settings)动态更新集群的某些设置。PUT /_cluster/settings
节点重启(Node Restart)重启一个或多个 Elasticsearch 节点。POST /_cluster/restart
集群快照(Cluster Snapshot)创建集群数据的备份。使用 X-Pack 或第三方插件创建快照
集群升级(Cluster Upgrade)滚动升级 Elasticsearch 集群到新版本。逐步升级节点

示例:

假设我们需要检查集群的当前状态,包括分片分配和任务进度:

GET /_cluster/health

这个命令将返回集群的健康状态,包括每个索引的分片数量和状态。

接下来,如果我们想要获取集群的统计信息,如文档数量和索引数量:

GET /_cluster/stats

这个命令将返回集群的统计信息,包括节点数量、索引数量、文档总数等。

如果您想要手动重新路由分片以优化集群或处理故障:

POST /_cluster/reroute?retry_failed=true

这个命令将尝试重新分配失败的分片。

20. Elasticsearch灾难恢复(Disaster Recovery)与备份(Backup)
功能描述示例
快照与恢复(Snapshot and Restore)创建集群状态的备份,并能够恢复数据。使用 X-Pack 插件的 _snapshot API
索引副本(Index Replicas)通过副本分片提高数据的可用性和读取性能。设置 number_of_replicas 在索引设置中
硬件故障转移(Hardware Failover)当节点发生故障时,副本分片能够自动接管。依赖于副本分片机制
集群重启(Cluster Restart)安全地重启整个集群或单个节点,用于维护或升级。POST /_cluster/restart
读写一致性(Read/Write Consistency)确保即使在节点故障的情况下,数据的读写一致性。使用 write wait 机制
时间点恢复(Point-in-Time Recovery, PITR)恢复到任意时间点的状态,用于防止数据损坏或误删除。使用快照和时间戳恢复
集群重新平衡(Cluster Rebalancing)集群自动进行分片的重新平衡,以优化资源使用。自动进行,无需手动干预
数据迁移(Data Migration)将数据从一个集群迁移到另一个集群或升级集群版本。使用 reindex API

示例:

假设我们需要创建一个集群的快照,并在需要时恢复数据:

PUT /_snapshot/my_backup
{"type": "fs","settings": {"location": "/mount/backups","compress": true}
}POST /_snapshot/my_backup/snapshot_name?wait=true

在这个示例中,我们首先定义了一个名为 my_backup 的快照存储库,然后创建了一个名为 snapshot_name 的快照。

如果我们需要恢复数据,可以使用以下命令:

POST /_snapshot/my_backup/snapshot_name/_restore

这个命令将开始恢复过程,将数据恢复到集群中。

接下来,如果我们想要在集群中删除旧的快照以节省空间:

DELETE /_snapshot/my_backup/snapshot_name

这个命令将删除指定的快照。

21.Elasticsearch性能优化(Performance Optimization)
优化领域描述示例
查询优化(Query Optimization)优化查询结构和查询语句以提高搜索性能。使用过滤器(filter)进行非评分搜索
索引优化(Index Optimization)优化索引的存储和结构,如使用更少的分片。"settings": {"index": {"number_of_shards": 1}}
分片优化(Shard Optimization)调整分片数量以平衡集群的负载和性能。根据数据量和查询负载调整分片数
硬件优化(Hardware Optimization)根据工作负载选择合适的硬件,如更快的 CPU 或更多的 RAM。固态硬盘(SSD)用于提高 I/O 性能
缓存优化(Caching Optimization)利用 Elasticsearch 的缓存机制,如字段数据缓存。调整 indices.fielddata.cache 相关设置
批量处理(Bulk Processing)使用批量操作减少网络开销和提高索引效率。使用 _bulk API 进行文档索引
刷新和合并(Refresh and Merge)调整索引的刷新间隔和合并策略以优化写入性能。设置 "refresh_interval": "30s"
线程池管理(Thread Pool Management)根据操作类型调整线程池大小。为搜索和索引操作设置不同的线程池
搜索结果缓存(Search Result Caching)缓存常见的搜索结果以加快读取速度。使用 cache 参数在搜索时缓存结果
冷热架构(Hot-Warm Architecture)在热节点上执行写入和实时搜索,在冷节点上执行历史数据分析。使用冷热节点架构优化成本和性能

示例:

假设我们想要优化查询性能,特别是当查询非常频繁且数据集很大时:

GET /_search
{"query": {"bool": {"filter": [{"term": {"category.keyword": "books"}}],"must": [{"match": {"description": "Elasticsearch"}}]}}
}

 在这个示例中,我们使用 bool 查询的 filter 子句对 category 字段进行精确匹配,这样会使用 term 查询而不是全文 match 查询,因为它不需要计算相关性得分,可以提高性能。

接下来,如果我们想要优化索引的存储,减少分片数量以提高查询速度:

PUT /my_index
{"settings": {"index": {"number_of_shards": 1,"number_of_replicas": 1}}
}

在这个示例中,我们创建了一个名为 my_index 的新索引,并将分片数设置为1,副本数设置为1,这适用于数据量不大且查询性能要求较高的场景。

     暂时就先总结这些吧,后续再继续细化。


http://www.mrgr.cn/p/56875101

相关文章

WindowsPE重装Windows系统详细介绍

本文详细介绍了WindowsPE、UEFI BIOS、如何制作WindowsPE、网络唤醒WOL、如何格式化硬盘及分区 、GHost还原数据、驱动程序分类相关知识目录目录理论知识 什么是WindowsPE? 什么是UEFI BIOS?(简)实操 如何制作WindowsPE? 如何进入BIOS? 常用项介绍 设置U盘启动 网络…

02_c/c++开源库ZeroMQ

1.安装 C库 libzmq sudo apt install libzmq3-dev 实例: https://zeromq.org/get-started/?languagec&librarylibzmq# 编译依赖: pkg-config --cflags --libs libzmq or cat /usr/lib/x86_64-linux-gnu/pkgconfig/libzmq.pc -isystem /usr/include/mit-krb5 -I/usr/in…

dwc3控制器是怎么处理otg

概念 在OTG中&#xff0c;初始主机设备称为A设备&#xff0c;外设称为B设备。可用电缆的连接方式来决定初始角色。两用设备使用新型Mini-AB插座&#xff0c;从而使Mini-A插头、Mini-B插头和Mini-AB插座增添了第5个引脚&#xff08;ID&#xff09;&#xff0c;以用于识别不同的…

存储器数据恢复相关知识

讲述硬盘基本结构及其储存理论,介绍如何恢复常用存储器数据。目录目录理论知识 硬盘如何储存数据? 磁道和扇区简介 盘面号 磁道 柱面 扇区 硬盘如何读写数据? 数据删除原理 数据如何丢失的? 人为原因造成的数据丢失: 自然灾害造成的数据丢失: 软件原因造成…

ARM学习(26)链接库的依赖查看

笔者今天来聊一下查看链接库的依赖。 通常情况下&#xff0c;运行一个可执行文件的时候&#xff0c;可能会出现找不到依赖库的情况&#xff0c;比如图下这种情况&#xff0c;可以看到是缺少了license.dll或者libtest.so&#xff0c;所以无法运行。怎么知道它到底缺少什么dll呢&…

构建RAG应用-day05: 如何评估 LLM 应用 评估并优化生成部分 评估并优化检索部分

评估 LLM 应用 1.一般评估思路 首先,你会在一到三个样本的小样本中调整 Prompt ,尝试使其在这些样本上起效。 随后,当你对系统进行进一步测试时,可能会遇到一些棘手的例子,这些例子无法通过 Prompt 或者算法解决。 最终,你会将足够多的这些例子添加到你逐步扩大的开发集中…

android脱壳第二发:grpc-dumpdex加修复

上一篇我写的dex脱壳&#xff0c;写到银行类型的app的dex修复问题&#xff0c;因为dex中被抽取出来的函数的code_item_off 的偏移所在的内存&#xff0c;不在dex文件范围内&#xff0c;所以需要进行一定的修复&#xff0c;然后就停止了。本来不打算接着搞得&#xff0c;但是写了…

ELK 日志分析系统(二)

一、ELK Kibana 部署 1.1 安装Kibana软件包 #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm 1.2 设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释&#xff0c;Kiabana 服务的默认监听端口为5601 server.po…

简单的jmeter脚本自动化

1、创建线程组&#xff0c;定义自定义变量&#xff0c;保存请求默认值 2、用csv编写测试用例 备注&#xff1a;如果单元格内本身就有引号&#xff0c;则格式会有点小问题&#xff0c;不能直接修改为csv 用txt打开后 有引号的需要在最外层多包一层引号&#xff0c;每个引号前…

SpringBoot+vue开发记录(二)

说明&#xff1a;本篇文章的主要内容为SpringBoot开发中后端的创建 项目创建: 1. 新建项目&#xff1a; 如下&#xff0c;这样简单创建就行了&#xff0c;JDK什么的就先17&#xff0c;当然1.8也是可以的&#xff0c;后面可以改。 这样就创建好了&#xff1a; 2. pom.xml…

Golang | Leetcode Golang题解之第44题通配符匹配

题目&#xff1a; 题解&#xff1a; func isMatch(s string, p string) bool {for len(s) > 0 && len(p) > 0 && p[len(p)-1] ! * {if charMatch(s[len(s)-1], p[len(p)-1]) {s s[:len(s)-1]p p[:len(p)-1]} else {return false}}if len(p) 0 {retur…

go的编译以及运行时环境

开篇 很多语言都有自己的运行时环境&#xff0c;go自然也不例外&#xff0c;那么今天我们就来讲讲go语言的运行时环境&#xff01; 不同语言的运行时环境对比 我们都知道Java的运行时环境是jvm &#xff0c;javascript的运行时环境是浏览器内核 Java -->jvm javascript…

基于Springboot的网课管理系统

基于SpringbootVue的网课管理系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 课程表 论坛交流 学校公告 后端 学生管理 教师管理 班级管理 课程分类管理…

TODO -蓝桥杯2018年A组-付账问题

0.题目 题目描述 几个人一起出去吃饭是常有的事。但在结帐的时候,常常会出现一些争执。 现在有 \(n\) 个人出去吃饭,他们总共消费了 \(S\) 元。其中第 \(i\) 个人带了 \(a_i\) 元。幸运的是,所有人带的钱的总数是足够付账的,但现在问题来了:每个人分别要出多少钱呢? 为了…

【TCP:可靠数据传输,快速重传,流量控制,TCP流量控制】

文章目录 可靠数据传输TCP&#xff1a;可靠数据传输TCP发送方事件快速重传流量控制TCP流量控制 可靠数据传输 TCP&#xff1a;可靠数据传输 TCP在IP不可靠服务的基础上建立了rdt 管道化的报文段 GBN or SR 累计确认&#xff08;像GBN&#xff09;单个重传定时器&#xff08;像…

小伙伴:我是专升本,能不写在简历里吗?

大家好,我是树哥。 最近我推出了简历辅导服务(详见:500 块就能获得 10 年的行业经验,太赚了!),有一位同学找我做了简历辅导。 在阅读他的简历的时候,我发现他的学历没有写入学时间和毕业时间,感觉不是很直观,于是让他补全一下。小伙伴回复说:我是专升本的,本科只有…

JetBrains PhpStorm v2024.1 安装教程 (PHP集成开发IDE)

前言 PhpStorm是由JetBrains推出的一款轻量级集成开发环境&#xff0c;专为PHP开发者而设计。该软件融合了智能的HTML/CSS/JavaScript/PHP编辑器、代码质量分析工具、版本控制系统集成&#xff08;包括SVN和GIT&#xff09;、调试和测试等功能。除此之外&#xff0c;PhpStorm还…

PyQt介绍——动画使用详解之QPropertyAnimation

一、继承关系 PyQt5的动画框架是QAbstractAnimation&#xff0c;它是一个抽象类&#xff0c;不能直接使用&#xff0c;需要使用它的子类。它的类结构如下&#xff1a; QAbstractAnimation&#xff1a;抽象动画&#xff0c;是所有动画的基类&#xff0c;不能直接使用。 QVariant…

Jetpack Compose 中如何实现全面屏

看问题本质,设置全面屏,是系统窗口的行为,与 View 和 Compose 有什么关系呢? 所以,原理和传统 View 视图是一样的,甚至 Api 都是一模一样的,不熟悉的可以看我之前的文章。传送门: Android 全面屏体验 那为什么还要写这篇文章呢?主要是在 Compose 中写法上的一些区别,…

论文解读:Label Hallucination for Few-Shot Classification

文章汇总 动机 本文的一个思想就是&#xff1a;尽管新类的标签并不能“恰如其分”地表示基数据集中的样本&#xff0c;但是很多基数据集的样本会包含与新类中相似的对象&#xff0c;例如&#xff0c;基数据集中的老虎和新类中的猫有相似的特征&#xff0c;那么就有60%的概率将…