当前位置: 首页 > article >正文

Elasticsearch简单介绍

1、 Elasticsearch简介

Elasticsearch 是一个分布式的、基于 RESTful API 的搜索和分析引擎,广泛用于大规模的数据存储和快速检索。它最初由 Shay Banon 于 2010 年开发,是开源的,并且是 Elastic Stack(通常称为 ELK Stack)的核心组成部分,另外组成部分是 Logstash、Beats(用于数据收集和处理)和 Kibana(用于数据可视化)。

2 正向索引与倒排索引

2.1 正向索引

正向索引 是指为每个文档记录其中出现的所有词汇及其位置。其结构可以理解为:每个文档对应一份词汇表,存储该文档中出现的所有词以及它们的频率、位置等信息。

特点:
按文档进行索引,存储每个文档的详细信息。
优点是容易获取某个文档中所有词汇的信息,适合于需要统计文档中词频、词位置等情况的操作。
缺点是对于查找某个词在哪些文档中出现效率较低,因为需要扫描所有文档。

2.2 倒排索引(Inverted Index)


倒排索引是搜索引擎中最常用的索引结构,用来快速查找包含某个词的所有文档。倒排索引建立了一张从词汇到文档的映射表,即对于每个词,记录它在哪些文档中出现,以及在这些文档中的位置。

特点:
按词汇进行索引,快速查找包含该词的所有文档。
优点是对搜索效率极高,尤其是当我们查询某个词或一组词时,能够快速定位所有相关文档。
缺点是需要额外的空间存储索引表。

3 msql和elasticsearch概念对比

总结

Mysql 适用于需要强一致性和复杂关系查询的场景,比如财务系统、事务型数据库。
Elasticsearch 更适合大规模实时搜索、日志分析、全文检索等应用场景,具有高扩展性和近实时搜索能力。
这两者可以互补使用,MYSQL 处理结构化数据,ES 提供搜索和分析。

4 使用 Docker 安装 Elasticsearch + Kibana

5 操作索引库

5.1 创建索引库

访问kibana,默认端口为5601。Dev Tools 提供了一个类似于控制台的界面,你可以在其中输入并执行 Elasticsearch 的 RESTful API 请求。可通过交互式的方式执行 Elasticsearch 查询、管理索引库和执行其他集群操作。

指定 mappings 和 settings 创建索引库
在创建索引库时指定 mappings(字段类型定义)和 settings(如分片和副本的设置)。

PUT /my_index
{
  "settings": {
    "number_of_shards": 3,  # 分片数
    "number_of_replicas": 1  # 副本数
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text"
      },
      "author": {
        "type": "keyword"
      },
      "publish_date": {
        "type": "date"
      },
      "price": {
        "type": "float"
      }
    }
  }
}

说明

settings:

number_of_shards:定义索引库的分片数量。分片是用于并行处理数据的一部分。
number_of_replicas:定义每个分片的副本数,以提高数据的可用性和容错性。
mappings:

properties:定义字段及其类型。

text:用于全文搜索的字段。
keyword:用于精确值搜索的字段,通常用于过滤、排序和聚合。
date:用于日期类型的字段。
float:用于存储浮点数。

5.2 查询、删除、修改索引库

查询索引库的配置信息

GET /my_index

这将返回 my_index 的配置信息,包括分片数、副本数、字段映射等。

删除索引库

DELETE /my_index

这个请求会永久删除名为 my_index 的索引库以及其中的所有数据。操作不可逆,因此删除前请确保不再需要该数据。

修改索引库
在 Elasticsearch 中,索引库的某些设置是可以在创建后修改的,但有些设置(如 number_of_shards)则不能更改。以下是一些常见的可修改操作:

修改索引库的 settings,一些可修改的 settings 包括副本数量、刷新间隔等。
示例:修改副本数

PUT /my_index/_settings
{
  "number_of_replicas": 2
}

这个请求会将 my_index 的副本数量从当前值修改为 2。副本数可以随时修改,以增加或减少数据的冗余和查询性能。

修改字段映射 (mappings)
字段映射通常在索引库创建时指定,并且一旦设置,某些字段类型不能直接修改。不过,你可以通过以下方式增加新的字段:
示例:增加新的字段映射

PUT /my_index/_mapping
{
  "properties": {
    "new_field": {
      "type": "text"
    }
  }
}

这个请求会在 my_index 中增加一个名为 new_field 的新字段。注意,已经存在的字段类型无法修改,你只能添加新的字段。

6 文档操作

6.1 新增、查询、删除文档

6.1.1、新增文档

新增文档的DSL语法如下

示例 1:使用 POST 新增文档

POST /my_index/_doc/
{
  "title": "Elasticsearch Basics",
  "author": "John Doe",
  "publish_date": "2024-01-01",
  "price": 19.99
}

示例 2:使用 PUT 新增或更新文档(指定 ID)

PUT /my_index/_doc/1
{
  "title": "Elasticsearch Advanced",
  "author": "Jane Smith",
  "publish_date": "2024-02-01",
  "price": 29.99
}

指定文档 ID:文档的 ID 被明确设置为 1。如果该 ID 已存在,则该操作会更新该文档。

6.1.2. 查询文档

使用 GET 请求来检索特定的文档或执行搜索查询。
示例 1:根据 ID 查询文档

GET /my_index/_doc/1

示例 2:搜索文档(基于条件)

GET /my_index/_search
{
  "query": {
    "match": {
      "title": "Elasticsearch"
    }
  }
}

搜索:通过 match 查询,Elasticsearch 会在 title 字段中搜索包含 “Elasticsearch” 关键字的文档。示例 3:获取所有文档

GET /my_index/_search
{
  "query": {
    "match_all": {}
  }
}

匹配所有文档:match_all 查询会返回索引库中的所有文档。

6.1.3、 删除文档

使用 DELETE 请求删除指定的文档。
示例:根据 ID 删除文档

DELETE /my_index/_doc/1

这将删除 my_index 索引库中 ID 为 1 的文档。如果指定的文档不存在,Elasticsearch 会返回一个 404 错误。


 


http://www.kler.cn/a/284030.html

相关文章:

  • 2023年MathorCup数学建模B题城市轨道交通列车时刻表优化问题解题全过程文档加程序
  • 设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
  • 【嵌入式开发】单片机CAN配置详解
  • 应用程序部署(IIS的相关使用,sql server的相关使用)
  • 数据结构-集合
  • pip3 install -e .[stable]讲解
  • 智慧高校迎新服务平台的设计与实现---附源码92489
  • http方法调用接口
  • Django如何实现websocket
  • 【工作实践】MVEL 2.x语法指南
  • vscode在html中的使用
  • 多进程比多线程开销大的原因
  • 海绵城市雨水监测系统
  • C++:Github开源7.8Kstar的线程池介绍
  • 如何在没有密码的情况下解锁 Oppo 手机?5 种简单的方法
  • hadoop日志文件
  • 随身wifi靠谱吗?适合哪类人使用?靠谱随身wifi怎么选?热门随身wifi推荐测评!
  • CRC32
  • 使用[KafkaStreams流计算框架实时计算产生报警(升级报警)
  • 深入解析Nginx的Fair调度算法:实现请求的智能分配
  • 中国各地区数字经济发展对环境污染的影响数据(2011-2021年)
  • 坐牢第三十天(c++)
  • 【微信小程序】分包--独立分包
  • 请问基于规则和强化学习的各自的优缺点有哪些?应用场景有哪些?今天的北京机器人展上的技术专家的技术
  • 学习日志30
  • 鸿蒙( Beta5.0版)开发实战:自定义TabBar页签