目录
快速入门
快速了解
一、Elasticsearch 官方定义
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,同时是可扩展的数据存储和矢量数据库,能够应对日益增多的各种用例。作为 Elastic Stack 的核心,Elasticsearch 能够集中存储您的数据,实现闪电般的搜索速度、精细的相关性调整以及强大的分析能力,并且能够轻松地进行规模扩展。
Elasticsearch 是一个基于 Lucene 的开源搜索引擎,提供了一个分布式、多租户的全文搜索引擎,具有 HTTP Web 接口和无模式 JSON 文档。它可以快速地存储、搜索和分析大量的数据。
二、主要特点
-
分布式架构:
-
Elasticsearch 可以在多台服务器上运行,自动将数据分布到不同的节点上,实现水平扩展。这使得它能够处理大规模的数据量和高并发的查询请求。
-
当数据量增加时,可以轻松地添加更多的节点来扩展存储和处理能力,而无需停机或对应用程序进行重大修改。
-
-
高可用性:
-
通过数据副本机制,即使某些节点出现故障,数据仍然可用。Elasticsearch 会自动将数据复制到多个节点上,确保数据的冗余和可靠性。
-
如果一个节点发生故障,其他节点可以接管其工作,保证系统的持续运行。
-
-
全文搜索能力:
-
支持对文本数据进行强大的全文搜索,能够快速找到包含特定关键词的文档。它使用倒排索引技术,将文本中的每个单词与包含该单词的文档进行关联,从而实现快速的搜索。
-
可以进行复杂的查询,如模糊搜索、通配符搜索、短语搜索等,满足各种不同的搜索需求。
-
-
实时性:
-
数据可以在写入后立即被搜索到,实现实时的数据分析和查询。这对于需要快速响应变化的应用场景非常重要,如实时监控、日志分析等。
-
新写入的数据会被快速地索引并可用于搜索,无需等待批量处理或长时间的索引过程。
-
-
灵活的数据模型:
-
Elasticsearch 支持无模式的数据存储,即可以存储任意格式的 JSON 文档,无需预先定义数据结构。这使得它非常适合处理半结构化和非结构化数据。
-
可以根据实际需求随时添加或修改字段,而不会影响现有数据的存储和查询。
-
三、主要应用场景
-
搜索应用:
-
构建企业内部的搜索系统,如文档搜索、知识库搜索等。可以快速地搜索和查找企业内部的各种文档、报告、知识库文章等,提高员工的工作效率。
-
电商网站的商品搜索,提供快速、准确的商品搜索功能,帮助用户找到所需的商品。
-
-
日志分析:
-
集中存储和分析应用程序的日志数据,快速定位问题和异常情况。可以对日志进行实时监控,及时发现系统中的错误和异常,以便进行快速的故障排除。
-
安全日志分析,检测潜在的安全威胁和异常行为。通过对安全日志的分析,可以及时发现入侵行为、异常登录等安全问题。
-
-
数据分析:
-
对大量的数据进行实时分析,如网站流量分析、用户行为分析等。可以快速地聚合和分析数据,生成各种报表和指标,为业务决策提供数据支持。
-
物联网数据分析,处理和分析来自物联网设备的大量数据,实时监测设备状态和行为。
-
四、与主流技术的相似性和区别
-
与 Solr 的相似性和区别:
-
相似性:
-
两者都是基于 Lucene 的开源搜索引擎,都提供了强大的全文搜索功能。
-
都支持分布式架构,可以处理大规模的数据量。
-
-
区别:
-
数据存储方式:Elasticsearch 是基于 JSON 文档的无模式存储,而 Solr 通常需要定义严格的模式。这使得 Elasticsearch 在处理半结构化和非结构化数据时更加灵活。
-
实时性:Elasticsearch 具有更好的实时性,数据可以在写入后立即被搜索到,而 Solr 需要一定的时间进行索引更新。
-
社区活跃度:Elasticsearch 的社区活跃度较高,更新频繁,提供了更多的功能和插件。
-
-
-
与传统关系型数据库的区别:
-
数据模型:关系型数据库通常需要预先定义严格的数据模式,而 Elasticsearch 支持无模式的数据存储。
-
查询语言:关系型数据库使用 SQL 进行查询,而 Elasticsearch 使用基于 JSON 的查询语言 DSL(Domain Specific Language)。
-
应用场景:关系型数据库适用于结构化数据的存储和管理,以及复杂的事务处理;而 Elasticsearch 主要用于全文搜索和实时数据分析。
-
什么是elasticsearch? 一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析 系统监控等功能 什么是elastic stack (ELK) ? 是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch 什么是Lucene? 是Apache的开源搜索引擎类库,提供了搜索引擎的核心API
相比与lucene,elasticsearch具备下列优势
-
支持分布式,可水平扩展
-
提供Restful接口,可被任何语言调用
与MySQL对比
相关组件,概念
elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)
Kibana 数据可视化组件(提供ES可视化界面,可以操作ES)、Logstash 和Beats数据抓取组件。(这些组件都可以替换)
IK分词器:对中文一个一个词语的划分,避免汉字在ES中每个字都要划分(依赖于某一字典,所以词语有限,但也可以在配置文件中添加自己的扩展字典,删除没必要的词字典)
Mapping映射约束,Analyzer:Mapping中的属性,选择使用哪种分词器。分完的每个词称为term。
增删改查
以下是在 Elasticsearch(ES)中对文档和索引的增删改查操作示例:
一、文档的增删改查
-
增加文档:
-
使用 PUT 或 POST 请求向特定索引中添加文档。
-
示例:
-
{ "title": "Document 1", "content": "This is the content of document 1." }
-
解释:向名为 "my_index" 的索引中添加一个 ID 为 1 的文档,文档包含 "title" 和 "content" 两个字段。
-
-
删除文档:
-
使用 DELETE 请求删除特定索引中的文档。
-
示例:
-
解释:删除 "my_index" 索引中 ID 为 1 的文档。
-
-
修改文档:
-
使用 POST 请求结合 "_update" 端点更新文档。
-
示例:
-
{ "doc": { "title": "Updated Document 1" } }
-
解释:更新 "my_index" 索引中 ID 为 1 的文档的 "title" 字段。
-
-
查询文档:
-
使用 GET 请求查询特定索引中的文档。
-
示例:
-
解释:查询 "my_index" 索引中 ID 为 1 的文档。
-
二、索引的增删改查
-
增加索引:
-
通常无需显式创建索引,在添加文档时如果索引不存在会自动创建。但也可以使用 PUT 请求手动创建索引并定义映射。
-
示例:
-
{ "mappings": { "properties": { "field1": { "type": "text" }, "field2": { "type": "integer" } } } }
-
解释:创建名为 "new_index" 的索引,并定义了两个字段 "field1" 和 "field2" 的类型。
-
-
删除索引:
-
使用 DELETE 请求删除索引。
-
示例:
-
解释:删除名为 "my_index" 的索引。
-
-
修改索引设置或映射:
-
使用 PUT 请求更新索引的设置或映射。
-
示例:更新索引的副本数量。
-
{ "index": { "number_of_replicas": 2 } }
-
解释:将 "my_index" 索引的副本数量设置为 2。
-
-
查询索引信息:
-
使用 GET 请求获取索引的信息。
-
示例:
-
解释:查询名为 "my_index" 的索引的信息,包括设置、映射、统计信息等
-
示例: