Nodejs 第八十三章(ElasticSearch全文检索)

什么是ElasticSearch?

ElasticSearch 是一个开源的、分布式的搜索和分析引擎,特别擅长处理大规模的日志和文本数据。它基于 Apache Lucene 构建,提供了强大的全文本搜索功能和实时的数据分析能力。ElasticSearch 常用于日志和事件数据的实时搜索、分析以及大型文本数据的全文检索。

场景

  1. 应用程序日志分析:实时分析应用程序日志,以便快速发现和解决问题。
  2. 网站搜索:为网站提供快速的全文搜索功能,提升用户体验
  3. 地图服务:提供基于位置的搜索和导航服务

安装

1. 安装elastic

下载地址www.elastic.co/cn/download...

  1. 选择你所拥有的操作系统下载即可
  2. 解压到你喜欢的目录即可

如果你要使用你自己的java版本配置JAVA_HOME环境变量即可,如果你用Elastic自带的JDK也是可以的 目前自带的版本是21.0.2

  1. 启动运行bin目录下面的 elasticsearch 文件
  2. 修改elastic密码 执行bin 目录 下面的 elasticsearch-reset-password -u elastic -i 然后输出密码即可 例如 123456
  3. 关闭https打开 elasticSearch/config/elasticsearch.yml 修改为false

访问http://localhost:9200 即可 默认端口9200

  1. 账号是 elastic 密码是第四条你修改之后的密码 返回以下信息即可成功

2.安装 kibana

Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作,你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互

下载地址www.elastic.co/cn/download...

选择对应的操作系统即可
Kibana基于Nodejs环境开发,需要安装Nodejs 安装过的忽略

  1. 下载完成解压到你喜欢的目录即可 (解压比较慢等待即可)
  2. 解压完成运行 kibana/bin/kibana.bat 文件即可
  3. 打开之后访问 http://localhost:5601/

添加测试数据

访问测试数据

对接Node.js

安装依赖包

sh 复制代码
npm install @elastic/elasticsearch

增删改差的实现

核心概念

  1. 索引类似于关系型数据库中的数据库概念。它是一个包含文档的集合。每个索引都有一个名字,这个名字在进行搜索、更新、删除等操作时作为标识使用,其实也就是类似于数据库的database
  2. 文档(document) 文档是Elasticsearch中的基本信息单元,类似于关系型数据库中的行(row)。文档是以JSON格式存储的,每个文档包含一个或多个字段(field),字段是键值对的形式
js 复制代码
import { Client } from '@elastic/elasticsearch';
const client = new Client({
    node: 'http://localhost:9200',
    auth: {
        username: 'elastic',
        password: '123456',
    },
});
//创建索引 + 数据
const user = await client.index({
    index: 'user-data',
    document: {
        user: 1,
        age: 18,
        name: 'jack',
    }
});
//查询数据
const response = await client.get({
    index: 'user-data',
    id:user._id //id可以指定也可以让elasticsearch自动生成
});
//搜索
const result = await client.search({
    index: 'user-data', //指定索引
    query: { //查询条件
        match: {
            name: 'jack' //模糊查询
        }
    },
    size: 1 //指定返回条数
});
console.log(result.hits.hits); //打印搜索结果
//删除
await client.delete({
    index: 'user-data',
    id: user._id
});

可视化使用

sh 复制代码
# 创建索引
PUT /task-index


# 添加文档到索引
POST /task-index/_doc
{
    "id": "1",
    "title": "不是哥们",
    "description": "杰哥不要啊杰哥??????????、啊"
}


# 搜索信息 q就是query的简写
GET /task-index/_search?q="杰哥"
相关推荐
kgduu10 分钟前
js之错误处理
开发语言·前端·javascript
德莱厄斯10 分钟前
Milkup 技术内幕:一个 Typora 风格的即时渲染 Markdown 编辑器是怎样炼成的
前端·javascript·markdown
Mintopia20 分钟前
架构师的心胸:把分歧装进系统,把人放在方案前
前端·架构
摇滚侠20 分钟前
ElasticSearch 是干什么的,从百度搜索、B 站搜索功能、京东搜索功能,淘宝搜索功能,理解 ElasticSearch 实现了什么功能
elasticsearch·百度·dubbo
亿元程序员20 分钟前
不是说现在AI很牛吗,怎么连个高光Shader效果都写不好?
前端
孟祥_成都24 分钟前
金三银四,一个面试官连连夸赞的个人网页技术分享
前端·面试·three.js
兆子龙31 分钟前
Vite 插件系统与构建流水线源码解析:从 Rollup 插件到 HMR
前端
代码老中医37 分钟前
Node_modules 比黑洞还重,我们的硬盘到底做错了什么?
前端
兆子龙37 分钟前
Vue 3 响应式系统 Reactivity 源码深度解析:从 ref 到 effect 的完整链路
前端
Smoothcloud_润云40 分钟前
GORM 事务管理与 Repository 模式完整指南
前端·数据库·代码规范