Elasticsearch知识点表格总结

         最近其实有点忙,在主攻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.mzph.cn/pingmian/3994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# WinForm —— 09 标签、文本框、按钮控件

标签 Label 一般显示不能编辑的文本或图像 常用属性、事件&#xff1a; 属性用途(Name)标签对象的ID&#xff0c;在代码里引用标签的时候会用到,一般以 lbl 开头Text设置或获取 界面上显示的 文本信息Image显示图像ImageList图像集&#xff0c;通常和 ListView ToolStrip Tre…

【Linux网络编程】数据链路层

数据链路层 1.以太网帧格式2.重谈局域网转发的原理(基于协议)3.认识MTU3.1MTU对IP协议的影响3.2MTU对UDP协议的影响3.3MTU对于TCP协议的影响 4.ARP协议 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励…

【QT学习】9.绘图,三种贴图,贴图的转换,不规则贴图(透明泡泡),简单绘图工具制作

一。绘图的解释 Qt 中提供了强大的 2D 绘图系统&#xff0c;可以使用相同的 API 在屏幕和绘图设备上进行绘制&#xff0c;它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 QPainter 用于执行绘图操作&#xff0c;其提供的 API 在 GUI 或 QImage、QOpenGLPaintDev…

【深度学习(1)】研0和研1如何上手深度学习及定方向

深度学习&#xff08;1&#xff09; 基础部分书籍鱼书 (理论部分) 视频课程我是土堆&#xff08;代码部分&#xff09; 提升部分李沐的动手学深度学习李沐老师的书 定方向网站&#xff1a; paperwithcode谷歌学术找论文 基础部分 书籍 鱼书 (理论部分) 适合入门&#xff0c;…

11.JAVAEE之网络原理1

1.应用层(和程序员接触最密切) 应用程序 在应用层这里,很多时候, 都是程序员"自定义"应用层协议的,(当然,也是有一些现成的应用层协议)&#xff08;这里的自定义协议,其实是非常简单的~~协议 >约定,程序员在代码中规定好,数据如何进行传输) 1.根据需求, 明确要传…

XTuner微调LLM:1.8B、多模态和Agent-笔记四

本次课程由XTuner 贡献者李剑锋、汪周谦、王群老师讲解【XTuner 微调 LLM&#xff1a;1.8B、多模态和 Agent】课程 课程视频&#xff1a;http:// https://b23.tv/QUhT6ni 课程文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 两种Finetun…

目标检测的mAP、PR指标含义

基本概念 什么是一个任务的度量标准。对于目标检测任务来说&#xff0c;它的首要目标是确定目标的位置并判别出目标类别。这里已医学图像为例&#xff0c;我们需要计算出血液红细胞&#xff08;RBC&#xff09;、白细胞&#xff08;WBC&#xff09;和血小板的数量。为了实现这一…

【网络安全】HTTP协议 — 基础

专栏文章索引&#xff1a;网络安全 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 学习目标​ 一、万维网的诞生与发展​编辑 1.万维网的诞生与发展 2.HTTP协议诞生与发展 二、网络基础 1.TCP/IP分层传输 1&#xff09;TCP/IP协议 2&#xff09;封装与拆封 …

stm32 hid自定义接收发送程序开发过程记录

cubleMX配置如下 修改端点描述符一次传输的数据大小 根据cubelMX标准在这里修改 编译错误 直接修改&#xff08;因为没有使用nodef &#xff09;编译通过 修改报告描述符&#xff08;默认的描述符无法传输数据&#xff09; 参考&#xff1a;USB协议详解第10讲&#xff08;USB描…

Xinlinx FPGA内的存储器BRAM全解

目录 一、总体概述1.7系列FPGA的BRAM特点2.资源情况 二、BRAM分类1.单端口RAM2.简单双端口RAM3.真双端口RAM 三、BRAM的读写1、Primitives Output Registers读操作注意事项2.三种写数据模式&#xff08;1&#xff09;Write_First&#xff08;2&#xff09;Read_First&#xff0…

Windows如何安装spark

Apache Spark是一个开源的大数据处理框架&#xff0c;旨在提供高效、通用和易用的大数据处理引擎。它最初由加州大学伯克利分校AMPLab开发&#xff0c;并于2010年开源。 Spark提供了一个基于内存的计算引擎&#xff0c;可以在大规模数据集上执行高速的数据处理任务。相比传统的…

pytest-stress:好用的pytest压力测试插件

简介&#xff1a;pytest-stress允许在用户定义的时间内循环测试。特别适用于一些已知测试时间&#xff0c;但不知道运行次数的场景。 历史攻略&#xff1a; 压力测试工具&#xff1a;Stress详解 Python&#xff1a;超过设定的时长则退出 安装&#xff1a; pip3 install py…

PC40与PC95磁芯的区别

磁芯pc95和pc40的差别在于PC95磁芯Pcv降低5%磁导率随温度变化小于PC40&#xff0c;利于谐振低温特性好,用在电源产品中低温效率高。另外就是PC95价格高。 PC是TDK公司对磁芯材料的命名&#xff0c; 类似有PC40&#xff0c;PC44&#xff0c;PC95&#xff0c;数字越大价格越高&am…

JetBrains CLion v2023.3.4 激活版 (C/C++ 集成开发IDE)

前言 JetBrains CLion是一款跨平台的C/C集成开发环境&#xff0c;由JetBrains公司推出。其最新版本支持C14几乎完全&#xff0c;并初步支持C17&#xff0c;使得编写代码更加便捷。CLion还提供了Disassembly view&#xff08;反汇编视图&#xff09;&#xff0c;即使没有源代码…

Unity 点击无效的问题

问题 我需要点击下落的音符。这个音符是一个按钮。但是点击一直没有触发这是为什么呢 Button unity的button事件button.onClick.AddListener因为我的音符下落太快&#xff0c;当按钮落下的时候&#xff0c;点击在音符上&#xff0c;但是抬起来的时候不在音符上【因为下落太快…

一、Django 初识

简介 Django 是一个用于构建 Web 应用程序的高级 Python Web 框架。 版本对应 不同版本的django框架是基于特定的不同的python版本开发的&#xff0c;所以不同版本的django框架要正常执行功能只能安装特定的python版本 Django安装 安装 Django # 全局安装 pip install dj…

web自动化系列-selenium的下拉框定位(十三)

在功能操作过程中 &#xff0c;遇到下拉列表是很正常的事 &#xff0c;比如像一些查询条件就都是使用的是下来列表 。所以 &#xff0c;selenium也需要支持对下拉框的操作 。 1.下拉列表 在selenium中&#xff0c;也提供了一个下拉列表操作的类 &#xff1a;Select . 以下为该…

设计模式入门(三)单例模式

文章目录 前提单例模式概念应用场景应用懒汉式饿汉式 参考链接 前提 最近在实际项目中使用到了设计模式中的单例模式&#xff0c;之前也单纯地从理论方面学习过单例模式&#xff0c;但是一直没有机会实际应用到项目中&#xff0c;这次从项目入手简单地对单例模式进行总结。 单…

jdk版本冲突,java.lang.UnsupportedClassVersionError: JVMCFRE003

主要是编辑器所用的jdk版本和项目用的不一致导致的&#xff0c;虽然编译通过了&#xff0c;但是运行是会报错 选好后点击Apply点击ok&#xff0c;然后重新编译一遍项目就可以了

【运维】Gitlab备份

Gitlab备份 备份什么&#xff1f;在哪&#xff1f;备份命令&#xff1f; 一、配置文件 GitLab默认的配置文件路径&#xff1a;/etc/gitlab/ /etc/gitlab/gitlab.rb&#xff1a;主配置文件&#xff0c;包含外部URL、仓库目录、备份目录等 /etc/gitlab/gitlab-secrets.json&…