博客
关于我
Elasticsearch(二)
阅读量:729 次
发布时间:2019-03-21

本文共 2237 字,大约阅读时间需要 7 分钟。

Elasticsearch核心概念

1. 概述

Elasticsearch是一种面向文档的全文检索引擎,基于Lucene框架实现。它将数据以JSON格式存储,并支持灵活的文档结构。与传统的关系型数据库不同,Elasticsearch不需要预先定义表结构,允许动态添加或修改字段。

2. 索引(Indices)

在Elasticsearch中,索引(Indices)相当于数据库的概念。一个索引可以包含多种类型(相当于表),每个类型包含多个文档(相当于行),而每个文档则由多个字段(相当于字段或列)组成。

2.1 分片与节点

Elasticsearch默认将一个索引划分为多个分片(Shards)。每个分片可以由集群中的多个节点(即Elasticsearch进程)托管。默认情况下,一个索引会有5个主要分片(Primary shards),每个主要分片又有一个副本(Replica shard)。当数据量增加时,可以将索引分成更多分片以提升查询性能。

2.2 字段类型(Mapping)

Elasticsearch的字段类型与关系型数据库的字段类型类似。字段类型决定了如何存储和检索数据。例如,name字段可以是text类型(支持全文搜索),age字段可以是integer类型(数值类型)。需要注意的是,Elasticsearch支持动态映射,能自动检测新字段的类型,但建议在开发时明确字段类型以减少潜在错误。

3. 文档(Documents)

Elasticsearch的核心操作单元是文档(Documents)。每个文档是一个独立的JSON对象,包含key-value对,支持层次结构(嵌套文档)。文档具有以下特点:

  • 自我包含:每个文档同时包含字段和值。
  • 层次结构:支持嵌套文档,如 { "user": { "name": "默辨", "age": 22 } }
  • 灵活结构:允许文档根据实际需求包含或忽略字段。

4. 倒排索引

Elasticsearch采用倒排索引(Inverted Index)结构,基于Lucene实现。倒排索引的主要目的是支持快速全文检索。具体过程如下:

  • 分词:将文档内容拆分为独立的词条(Token)。
  • 索合成:为每个词条创建一个包含动词列表的索引。
  • 查询:根据输入词条,Elasticsearch通过倒排索引快速定位相关文档。
  • 例如,搜索"to forever"时,Elasticsearch会找到包含这两个词条的文档,并基于匹配程度返回结果。

    5. IK分词器

    中文分词是检索准确性的重要环节。Elasticsearch默认使用分词器进行分词,ik_smartik_max_word是常用的中文分词算法。ik_smart采用最少切分,ik_max_word则尽量细化。

    5.1 下载与安装

    可以通过GitHub下载IK分词器插件,解压并放置在Elasticsearch的plugins目录下。启动Elasticsearch后,可以通过命令行查看插件列表。

    5.2 分词器配置

    IK分词器支持自定义词典文件,开发者可以基于项目需求自定义分词规则,提升检索的准确性。

    6. Rest风格说明

    Rest风格是一种软件架构风格,常用于API设计。Elasticsearch的RestAPI遵循以下规则:

    方法 URL 描述
    PUT localhost:9200/索引/类型/文档id 创建文档
    POST localhost:9200/索引/类型 创建文档
    POST localhost:9200/索引/类型/_update 更新文档
    DELETE localhost:9200/索引/类型/文档id 删除文档
    GET localhost:9200/索引/类型/文档id 查询文档

    7. 文档的基本操作

    7.1 添加数据

    使用PUT命令将数据添加到索引中。例如:

    PUT /mobian/type/1{  "name": "默辨",  "age": "22"}

    随后可以通过可视化界面或CMD查看添加结果。

    7.2 查询数据

    使用GET命令查询文档。例如,查询包含"3"name值:

    GET /mobian/user/_search?q=name:3

    7.3 更新数据

    使用POST命令配合_update操作部分字段更新。例如:

    POST /mobian/user/_update{  "name": "李四"}

    7.4 删除数据

    直接使用DELETE命令删除文档或索引。

    8. 复杂查询

    8.1 排序与分页

    使用sort字段控制排序,fromsize控制分页。例如:

    GET /mobian/user/_search{  "query": {    "match": {      "age": 22    }  },  "sort": {    "age": "asc"  },  "from": 0,  "size": 10}

    8.2 高亮查询

    使用highlight字段同时获取匹配结果及其高亮部分。例如:

    GET /mobian/user/_search{  "query": {    "term": {      "name": "默辨"    }  },  "highlight": ["name"]}

    通过逐步了解Elasticsearch的核心概念和操作方法,开发者可以更高效地进行数据存储和检索,充分发挥其面向文档的优势。

    转载地址:http://jirrz.baihongyu.com/

    你可能感兴趣的文章
    mysql 协议的退出命令包及解析
    查看>>
    mysql 参数 innodb_flush_log_at_trx_commit
    查看>>
    mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
    查看>>
    MySQL 命令和内置函数
    查看>>
    MySQL 和 PostgreSQL,我到底选择哪个?
    查看>>
    mysql 四种存储引擎
    查看>>
    MySQL 在并发场景下的问题及解决思路
    查看>>
    MySQL 在控制台插入数据时,中文乱码问题的解决
    查看>>
    MySQL 基础架构
    查看>>
    MySQL 基础模块的面试题总结
    查看>>
    MySQL 处理插入重主键唯一键重复值办法
    查看>>
    MySQL 备份 Xtrabackup
    查看>>
    mysql 复杂查询_mysql中复杂查询
    查看>>
    mYSQL 外键约束
    查看>>
    mysql 多个表关联查询查询时间长的问题
    查看>>
    mySQL 多个表求多个count
    查看>>
    mysql 多字段删除重复数据,保留最小id数据
    查看>>
    MySQL 多表联合查询:UNION 和 JOIN 分析
    查看>>
    MySQL 大数据量快速插入方法和语句优化
    查看>>
    mysql 如何给SQL添加索引
    查看>>