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

ElasticSearch 入门教程

ElasticSearch 入门教程

ElasticSearch 是一个分布式、可扩展的搜索和分析引擎,基于 Apache Lucene 构建,支持全文检索、结构化查询和聚合分析。本教程将带你深入了解 ElasticSearch 的核心概念、安装配置、常见操作,并提供示例代码,帮助你快速上手并高效使用它。


1. ElasticSearch 介绍

1.1 什么是 ElasticSearch?

ElasticSearch 是一个开源的分布式搜索引擎,广泛应用于日志分析、全文检索和业务数据搜索等场景。其主要特点包括:

  • 分布式架构:支持集群模式,具备高可用性和横向扩展能力。
  • 全文检索:基于倒排索引,实现快速精准的搜索。
  • RESTful API:提供简洁的 HTTP 接口,适用于多种编程语言。
  • 高扩展性:可灵活扩展节点,以应对大规模数据存储和查询需求。

1.2 ElasticSearch vs. MySQL

ElasticSearch 与 MySQL 在数据存储和查询方式上存在明显区别:

关键点ElasticSearchMySQL
数据结构JSON 文档存储关系型表结构
查询方式倒排索引,全文检索SQL 查询
事务支持不支持 ACID支持 ACID 事务
适用场景日志分析、全文检索、实时分析结构化数据存储、事务管理

ElasticSearch 适用于需要高效搜索的场景,如电商网站搜索、日志分析,而 MySQL 更适用于事务管理,如银行系统和用户管理。

1.3 关键概念

  • 索引(Index):类似数据库,存储一类结构相似的数据。
  • 文档(Document):索引中的基本数据单位,相当于数据库中的一条记录。
  • 字段(Field):文档中的属性,相当于数据库中的列。
  • 节点(Node):ElasticSearch 集群中的单个服务器实例。
  • 集群(Cluster):由多个节点组成的 ElasticSearch 运行环境。

2. ElasticSearch 的应用场景

  • 日志分析:收集、存储和查询应用日志,实现高效的监控和告警。
  • 全文检索:为网站、应用程序提供高效搜索,如电商、博客搜索。
  • 数据分析:支持大数据分析、聚合计算,如用户行为分析。
  • 监控系统:结合 Kibana 可视化数据,监测系统运行状态。

3. 中文分词器的挑战

ElasticSearch 默认使用标准分词器(Standard Analyzer),但对中文支持较差,可能会遇到以下问题:

  • 单字分割:默认按单个汉字分词,导致查询精度下降。
  • 无法识别专有名词:如“人工智能”可能被拆分成“人工”和“智能”。
  • 同义词处理:例如“搜索”和“查找”可能无法自动关联。

3.1 解决方案

  • 使用 IK 分词器(ik-analyzer),支持中文分词优化。
  • 自定义词库:添加行业术语,提高分词准确性。
  • 同义词扩展:配置同义词库,增强搜索体验。

示例:

PUT http://localhost:9200/my_index/_analyze
{"tokenizer": "ik_max_word","text": "ElasticSearch 中文分词测试"
}

4. 安装与配置

4.1 下载与安装

  1. 从 Elastic 官方网站 下载最新版本。
  2. 解压后进入 ElasticSearch 目录,修改 config/elasticsearch.yml 进行必要配置。
  3. 启动 ElasticSearch:
    ./bin/elasticsearch
    
  4. 通过浏览器访问 http://localhost:9200/ 确保服务正常运行。

4.2 关键配置参数

  • cluster.name:指定集群名称,使多个节点协同工作。
  • node.name:定义节点名称,便于管理和调试。
  • network.host:绑定监听地址,默认 localhost,可修改为 0.0.0.0 允许外部访问。
  • discovery.seed_hosts:定义集群中的初始节点列表。

5. ElasticSearch 在 Spring Boot 中的应用

5.1 引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

5.2 配置 ElasticSearch 连接

spring:elasticsearch:uris: http://localhost:9200

5.3 定义实体类

@Document(indexName = "my_index")
public class Article {@Idprivate String id;private String title;private String content;private int views;// Getter 和 Setter 省略
}

5.4 创建 Repository

public interface ArticleRepository extends ElasticsearchRepository<Article, String> {List<Article> findByTitle(String title);
}

5.5 使用 Repository 进行数据操作

@Autowired
private ArticleRepository articleRepository;public void saveArticle() {Article article = new Article();article.setTitle("ElasticSearch 教程");article.setContent("深入学习 ElasticSearch");articleRepository.save(article);
}

6. 总结

本教程介绍了 ElasticSearch 的基础概念、与 MySQL 的区别、安装配置、常见操作,并提供了 Spring Boot 集成示例。此外,我们还探讨了 ElasticSearch 的应用场景,以及中文分词的挑战与优化方案。ElasticSearch 作为一个强大的搜索和分析引擎,在日志分析、数据检索、业务搜索等领域有着广泛的应用。掌握这些基础知识,将帮助你更好地利用 ElasticSearch 进行数据管理和搜索优化。

相关文章:

ElasticSearch 入门教程

ElasticSearch 入门教程 ElasticSearch 是一个分布式、可扩展的搜索和分析引擎&#xff0c;基于 Apache Lucene 构建&#xff0c;支持全文检索、结构化查询和聚合分析。本教程将带你深入了解 ElasticSearch 的核心概念、安装配置、常见操作&#xff0c;并提供示例代码&#xf…...

用Python写一个算24点的小程序

一、运行界面 二、显示答案——递归介绍 工作流程&#xff1a; 1. 基本情况&#xff1a;函数首先检查输入的数字列表 nums 的长度。如果列表中只剩下一个数字&#xff0c;它会判断这个数字是否接近 24&#xff08;使用 abs(nums[0] - 24) < 1e-10 来处理浮点数精度问题&…...

分布式网络

分布式网络&#xff08;Distributed Network&#xff09;指的是一种计算机网络架构&#xff0c;其中计算资源&#xff08;计算、存储、数据处理等&#xff09;分布在多个物理或逻辑上的节点上&#xff0c;而不是集中在单一的服务器或数据中心中。这种架构的主要目标是提高系统的…...

忘记dedecms后台超级管理员账号和密码的解决方案

解决方案&#xff1a; 方案一、数据库修改&#xff1a; 1、前提是您能登录到数据库后台&#xff0c;登录MySQL数据库管理工具&#xff08;如phpMyAdmin&#xff09; 2、打开数据库中的 dede_admin 表&#xff0c;找到管理员记录&#xff0c;将 pwd 字段的值改成 f297a57a5a7…...

【Linux学习笔记】Linux基本指令分析和权限的概念

【Linux学习笔记】Linux基本指令分析和权限的概念 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】Linux基本指令分析和权限的概念前言一. 指令的分析1.1 alias 指令1.2 grep 指令1.3 zip/unzip 指…...

Git基础之分支

常用指令 git branch 列出本地所有分支 git branch -r 列出所有远程分支 git branch [branch-name] 新建一个分支&#xff0c;但依然停留在当前分支 git checkout -b [branch] 新建一个分支&#xff0c;并切换到该分支 git merge [branch] 合并指定分支当前分支 git branch -d …...

MAC电脑常用操作

环境&#xff1a;M3芯片 &#xff0c;macOS15.2 &#x1f680; 快捷键 &#x1f5a5;️ 窗口管理 ✅ 退出/进入全屏模式 • 浏览器等应用&#xff1a;⌘ Command Ctrl F ✅ 最小化当前窗口 • ⌘ Command M • &#x1f4a1; 隐藏窗口但保留应用在后台运行 ✅ 关闭当前标…...

【计算机网络】深入解析 HTTP 协议的概念、工作原理和通过 Fiddler 抓包查看 HTTP 请求/响应的协议格式

网络原理— HTTP 1. 什么是HTTP? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议&#xff1a; HTTP 往往是基于传输层的 TCP 协议实现的 (HTTP1.0,HTTP1.1,HTTP2.0 均为TCP,HTTP3基于UDP实现) 我们平时打开一个网站&#xff0c;就是通过HTTP协议来…...

Springboot redis bitMap实现用户签到以及统计,保姆级教程

项目架构&#xff0c;这是作为demo展示使用&#xff1a; Redis config&#xff1a; package com.zy.config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.Ob…...

【C++】:STL详解 —— 红黑树封装map和set

目录 红黑树的源代码 正向迭代器的代码 反向迭代器的代码 set的模拟实现 map的模拟实现 红黑树的源代码 #pragma once #include <iostream>using namespace std; // set ->key // map ->key/value// set ->key // map ->key/valueenum Colour {RED,BLAC…...

FPGA设计时序约束用法大全保姆级说明

目录 一、序言 二、时序约束概览 2.1 约束五大类 2.2 约束功能简述 2.3 跨时钟域约束 三、时序约束规范 3.1 时序约束顺序 3.2 约束的优先级 四、约束示例 4.1 设计代码 4.2 时序结果 4.2.1 create_clock 4.2.2 create_generated_clock 4.2.3 Rename_Auto-Derive…...

【前缀和与差分 C/C++】洛谷 P8218 求区间和

2025 - 03 - 09 - 第 72 篇 Author: 郑龙浩 / 仟濹 【前缀和与差分 C/C】 文章目录 洛谷 P8218 求区间和题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 说明/提示思路代码 洛谷 P8218 求区间和 题目描述 给定 n n n 个正整数组成的数列 a 1 , a 2 , ⋯ , a n a_…...

C++修炼之路:初识C++

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 引言 …...

Pytorch 第九回:卷积神经网络——ResNet模型

Pytorch 第九回&#xff1a;卷积神经网络——ResNet模型 本次开启深度学习第九回&#xff0c;基于Pytorch的ResNet卷积神经网络模型。这是分享的第四个卷积神经网络模型。该模型是基于解决因网络加深而出现的梯度消失和网络退化而进行设计的。接下来给大家分享具体思路。 本次…...

2025-3-9 一周总结

目前来看本学期上半程汇编语言,编译原理,数字电路和离散数学是相对重点的课程. 在汇编语言和编译原理这块,个人感觉黑书内知识点更多,细节更到位,体系更完整,可以在老师讲解之前进行预习 应当及时复习每天的内容.第一是看书,然后听课,在一天结束后保证自己的知识梳理完整,没有…...

如何在el-input搜索框组件的最后面,添加图标按钮?

1、问题描述 2、解决步骤 在el-input组件标签内&#xff0c;添加一个element-plus的自定义插槽&#xff0c; 在插槽里放一个图标按钮即可。 3、效果展示 结语 以上就是在搜索框组件的末尾添加搜索按钮的过程。 喜欢本篇文章的话&#xff0c;请关注本博主~~...

[项目]基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信

基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信 一.Si24Ri原理图二.Si24R1芯片手册解读三.驱动函数讲解五.移植2.4g通讯&#xff08;飞控部分&#xff09;六.移植2.4g通讯&#xff08;遥控部分&#xff09; 一.Si24Ri原理图 Si24R1芯片原理图如下&#xff1a; 右侧为晶振。 模块…...

Python爬取咸鱼Goodfish店铺所有商品接口的详细指南

在电商数据分析和市场研究中&#xff0c;爬取咸鱼店铺内的所有商品信息是一项极具价值的任务。通过调用咸鱼的goodfish.item_search_shop接口&#xff0c;可以获取指定店铺内的商品列表&#xff0c;包括商品标题、价格、图片链接、销量等详细信息。本文将详细介绍如何使用Pytho…...

【极光 Orbit•STC8A-8H】03. 小刀初试:点亮你的LED灯

【极光 Orbit•STC8H】03. 小刀初试&#xff1a;点亮你的 LED 灯 七律 点灯初探 单片方寸藏乾坤&#xff0c;LED明灭见真章。 端口配置定方向&#xff0c;寄存器值细推敲。 高低电平随心控&#xff0c;循环闪烁展锋芒。 嵌入式门初开启&#xff0c;从此代码手中扬。 摘要 …...

docker本地部署RagFlow

1.安装 克隆仓库 git clone https://github.com/infiniflow/ragflow.git构建预建的Docker映像并启动服务器 cd ragflow/docker chmod x ./entrypoint.sh docker compose -f docker-compose.yml -p ragflow up -d修改ragflow/docker/.env文件 #RAGFLOW_IMAGEinfiniflow/ragfl…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...