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="杰哥"
相关推荐
凌辰揽月2 小时前
AJAX 学习
java·前端·javascript·学习·ajax·okhttp
然我3 小时前
防抖与节流:如何让频繁触发的函数 “慢下来”?
前端·javascript·html
鱼樱前端3 小时前
2025前端人一文看懂 Broadcast Channel API 通信指南
前端·vue.js
烛阴4 小时前
非空断言完全指南:解锁TypeScript/JavaScript的安全导航黑科技
前端·javascript
鱼樱前端4 小时前
2025前端人一文看懂 window.postMessage 通信
前端·vue.js
快乐点吧4 小时前
【前端】异步任务风控验证与轮询机制技术方案(通用笔记版)
前端·笔记
pe7er5 小时前
nuxtjs+git submodule的微前端有没有搞头
前端·设计模式·前端框架
七月的冰红茶5 小时前
【threejs】第一人称视角之八叉树碰撞检测
前端·threejs
爱掉发的小李5 小时前
前端开发中的输出问题
开发语言·前端·javascript
祝余呀6 小时前
HTML初学者第四天
前端·html