本文共 2237 字,大约阅读时间需要 7 分钟。
Elasticsearch是一种面向文档的全文检索引擎,基于Lucene框架实现。它将数据以JSON格式存储,并支持灵活的文档结构。与传统的关系型数据库不同,Elasticsearch不需要预先定义表结构,允许动态添加或修改字段。
在Elasticsearch中,索引(Indices)相当于数据库的概念。一个索引可以包含多种类型(相当于表),每个类型包含多个文档(相当于行),而每个文档则由多个字段(相当于字段或列)组成。
Elasticsearch默认将一个索引划分为多个分片(Shards)。每个分片可以由集群中的多个节点(即Elasticsearch进程)托管。默认情况下,一个索引会有5个主要分片(Primary shards),每个主要分片又有一个副本(Replica shard)。当数据量增加时,可以将索引分成更多分片以提升查询性能。
Elasticsearch的字段类型与关系型数据库的字段类型类似。字段类型决定了如何存储和检索数据。例如,name
字段可以是text
类型(支持全文搜索),age
字段可以是integer
类型(数值类型)。需要注意的是,Elasticsearch支持动态映射,能自动检测新字段的类型,但建议在开发时明确字段类型以减少潜在错误。
Elasticsearch的核心操作单元是文档(Documents)。每个文档是一个独立的JSON对象,包含key-value对,支持层次结构(嵌套文档)。文档具有以下特点:
{ "user": { "name": "默辨", "age": 22 } }
。Elasticsearch采用倒排索引(Inverted Index)结构,基于Lucene实现。倒排索引的主要目的是支持快速全文检索。具体过程如下:
例如,搜索"to forever"
时,Elasticsearch会找到包含这两个词条的文档,并基于匹配程度返回结果。
中文分词是检索准确性的重要环节。Elasticsearch默认使用分词器进行分词,ik_smart
和ik_max_word
是常用的中文分词算法。ik_smart
采用最少切分,ik_max_word
则尽量细化。
可以通过GitHub下载IK分词器插件,解压并放置在Elasticsearch的plugins
目录下。启动Elasticsearch后,可以通过命令行查看插件列表。
IK分词器支持自定义词典文件,开发者可以基于项目需求自定义分词规则,提升检索的准确性。
Rest风格是一种软件架构风格,常用于API设计。Elasticsearch的RestAPI遵循以下规则:
方法 | URL | 描述 |
---|---|---|
PUT | localhost:9200/索引/类型/文档id | 创建文档 |
POST | localhost:9200/索引/类型 | 创建文档 |
POST | localhost:9200/索引/类型/_update | 更新文档 |
DELETE | localhost:9200/索引/类型/文档id | 删除文档 |
GET | localhost:9200/索引/类型/文档id | 查询文档 |
使用PUT
命令将数据添加到索引中。例如:
PUT /mobian/type/1{ "name": "默辨", "age": "22"}
随后可以通过可视化界面或CMD查看添加结果。
使用GET
命令查询文档。例如,查询包含"3"
的name
值:
GET /mobian/user/_search?q=name:3
使用POST
命令配合_update
操作部分字段更新。例如:
POST /mobian/user/_update{ "name": "李四"}
直接使用DELETE
命令删除文档或索引。
使用sort
字段控制排序,from
和size
控制分页。例如:
GET /mobian/user/_search{ "query": { "match": { "age": 22 } }, "sort": { "age": "asc" }, "from": 0, "size": 10}
使用highlight
字段同时获取匹配结果及其高亮部分。例如:
GET /mobian/user/_search{ "query": { "term": { "name": "默辨" } }, "highlight": ["name"]}
通过逐步了解Elasticsearch的核心概念和操作方法,开发者可以更高效地进行数据存储和检索,充分发挥其面向文档的优势。
转载地址:http://jirrz.baihongyu.com/