博客
关于我
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自动化同步校验_Shell: 分享MySQL数据同步+主从复制自动化脚本_20190313_七侠镇莫尛貝...
    查看>>
    Mysql自增id理解
    查看>>
    mysql自增id超大问题查询
    查看>>
    MySQL自定义变量?学不废不收费
    查看>>
    MySQL自带information_schema数据库使用
    查看>>
    MySQL获取分组后的TOP 1和TOP N记录
    查看>>
    mysql虚拟列表_动态网页制作-官方版合集下载-多特
    查看>>
    MySQL蜜罐反制获取攻击者信息
    查看>>
    Mysql表创建外键报错
    查看>>
    mysql表格调取数据库信息_MySQL™ 参考手册(获取有关数据库和表的信息)
    查看>>
    mysql表检查分析优化
    查看>>
    WARN: Establishing SSL connection without server‘s identity verification is not recommended.
    查看>>
    MySQL视图
    查看>>
    MySQL视图
    查看>>
    Mysql视图、变量、存储过程、函数
    查看>>
    Mysql视图、触发器、事务、储存过程、函数
    查看>>
    mysql视图建立MERGE算法和TEMPTABLE算法的区别(效率与表锁定问题)
    查看>>
    mysql视图,索引和存储过程
    查看>>
    mysql解压没有data_Windows 64 位 mysql 5.7以上版本包解压中没有data目录和my-default.ini及服务无法启动的快速解决办法(问题小结)...
    查看>>
    Mysql解压版安装
    查看>>