博客
关于我
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 Cluster 7.0.36 发布
    查看>>
    Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
    查看>>
    MySQL Cluster与MGR集群实战
    查看>>
    multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
    查看>>
    mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
    查看>>
    Multiple websites on single instance of IIS
    查看>>
    mysql CONCAT()函数拼接有NULL
    查看>>
    multiprocessing.Manager 嵌套共享对象不适用于队列
    查看>>
    multiprocessing.pool.map 和带有两个参数的函数
    查看>>
    MYSQL CONCAT函数
    查看>>
    multiprocessing.Pool:map_async 和 imap 有什么区别?
    查看>>
    MySQL Connector/Net 句柄泄露
    查看>>
    multiprocessor(中)
    查看>>
    mysql CPU使用率过高的一次处理经历
    查看>>
    Multisim中555定时器使用技巧
    查看>>
    MySQL CRUD 数据表基础操作实战
    查看>>
    multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
    查看>>
    mysql csv import meets charset
    查看>>
    multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
    查看>>
    MySQL DBA 数据库优化策略
    查看>>