博客
关于我
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/

    你可能感兴趣的文章
    mysqldump的一些用法
    查看>>
    mysqli
    查看>>
    MySQLIntegrityConstraintViolationException异常处理
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>
    Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
    查看>>
    mysql_real_connect 参数注意
    查看>>
    mysql_secure_installation初始化数据库报Access denied
    查看>>
    MySQL_西安11月销售昨日未上架的产品_20161212
    查看>>
    Mysql——深入浅出InnoDB底层原理
    查看>>
    MySQL“被动”性能优化汇总
    查看>>
    MySQL、HBase 和 Elasticsearch:特点与区别详解
    查看>>
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>
    mysql一个字段为空时使用另一个字段排序
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>