前言
Elasticsearch 是一个基于 Lucene 的搜索引擎,它提供了丰富的查询语言、分词器、聚合计算等功能。该搜索引擎适用于大规模数据集的全文搜索和分析。本文将介绍如何在 Deno 中使用 Elasticsearch 进行全文搜索。
环境搭建
在使用 Elasticsearch 之前,需要先搭建好 Elasticsearch 环境。可以通过以下链接下载并安装 Elasticsearch:https://www.elastic.co/cn/downloads/elasticsearch。安装完成后,启动 Elasticsearch:
./bin/elasticsearch
Elasticsearch 默认使用 9200 端口提供 HTTP API 。打开浏览器访问 http://localhost:9200/ ,可以看到 Elasticsearch 提供的 HTTP API 接口信息。
安装 elasticsearch-js 模块
在 Deno 中使用 Elasticsearch 可以通过 elasticsearch-js 模块来实现。elasticsearch-js 模块是 Elasticsearch 提供的官方 Node.js 客户端,可以用于连接 Elasticsearch 集群、执行查询、聚合、索引等操作。
安装 elasticsearch-js 模块:
deno install -Af --unstable https://deno.land/x/elasticsearch/mod.ts
创建索引
在 Elasticsearch 中,数据被组织为索引。索引类似于关系数据库中的表,但 Elasticsearch 不要求有相同的字段。索引中的每个文档都有一个类型和一个 ID。类型用于将文档分为多个类别,通常不建议使用。
创建一个名为 posts 的索引:
import { Client } from "https://deno.land/x/elasticsearch/mod.ts"; const client = new Client({ node: "http://localhost:9200" }); await client.indices.create({ index: "posts" });
添加数据
添加数据使用 index API,将 JSON 格式的文档添加到索引中:
-- -------------------- ---- ------- ----- -------------- ------ -------- --- ---- ----- - ------ -------------- ---------- ----- ----------------- ------------ ---------- ----- ------------- ----------------------- -------- -------------- -- - ------ ------ ----- -- ------- -- -------- - ------------ ------------------- --------- ------ ------ ---- -- ---- --- --------- --- ----------- ---- ------------ -- ---
这将在名为 posts 的索引中创建一个文档。文档的 ID 设置为 1。
查询数据
在 Elasticsearch 中,查询是指从一个或多个索引中检索与查询条件匹配的文档。elasticsearch-js 模块提供了多种查询类型,例如:match、term、range、bool、and、or 等。
下面的代码将搜索包含关键字 "elasticsearch" 的文档:
-- -------------------- ---- ------- ----- - ---- - - ----- --------------- ------ -------- ----- - ------ - ------ - -------- ---------------- -- -- -- --- ----------------------------
查询结果将存储在 hits 对象中。hits.hits 中包含命中的文档数组。
总结
本文介绍了如何在 Deno 中使用 Elasticsearch 进行全文搜索。首先需要搭建 Elasticsearch 环境,然后通过安装 elasticsearch-js 模块实现连接 Elasticsearch 集群、执行查询、聚合、索引等操作。
完整示例代码:https://github.com/denoel/elasticsearch-deno
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65032e5295b1f8cacd03960b