前言
ElasticSearch 是一款基于 Lucene 的搜索引擎,具有高性能、高可用性、分布式等特点,被广泛应用于全文搜索、日志分析、数据挖掘等领域。Fastify 是一款快速、低开销、可扩展的 Node.js Web 框架,具有极高的性能和灵活的插件机制。本文将介绍如何在 Fastify 中使用 ElasticSearch 进行数据搜索。
准备工作
在开始之前,需要先安装好 ElasticSearch 和 Fastify,以及相应的 Node.js 客户端库 elasticsearch.js。
创建 ElasticSearch 客户端
在 Fastify 中使用 ElasticSearch 需要先创建一个 ElasticSearch 客户端,可以采用以下代码:
const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: 'http://localhost:9200' })其中,node 参数指定了 ElasticSearch 的节点地址,可以是单个节点,也可以是多个节点组成的集群地址。
创建搜索 API
接下来,需要在 Fastify 中创建一个搜索 API,可以采用以下代码:
// www.javascriptcn.com code example
fastify.get('/search', async (request, reply) => {
const { q } = request.query
const { body } = await client.search({
index: 'myindex',
body: {
query: {
match: { title: q }
}
}
})
reply.send(body.hits.hits)
})其中,/search 是 API 的路径,q 是搜索关键字,myindex 是 ElasticSearch 索引名称,title 是要搜索的字段名称。这段代码的作用是在 ElasticSearch 中搜索包含关键字的文档,并返回搜索结果。
高级搜索
除了基本的全文搜索外,ElasticSearch 还支持许多高级搜索功能,如分词搜索、多字段搜索、过滤搜索、聚合搜索等。以下是一些示例代码:
分词搜索
// www.javascriptcn.com code example
fastify.get('/search', async (request, reply) => {
const { q } = request.query
const { body } = await client.search({
index: 'myindex',
body: {
query: {
match: { content: q }
}
}
})
reply.send(body.hits.hits)
})多字段搜索
// www.javascriptcn.com code example
fastify.get('/search', async (request, reply) => {
const { q } = request.query
const { body } = await client.search({
index: 'myindex',
body: {
query: {
multi_match: {
query: q,
fields: ['title', 'content']
}
}
}
})
reply.send(body.hits.hits)
})过滤搜索
// www.javascriptcn.com code example
fastify.get('/search', async (request, reply) => {
const { q, category } = request.query
const { body } = await client.search({
index: 'myindex',
body: {
query: {
bool: {
must: { match: { content: q } },
filter: { term: { category: category } }
}
}
}
})
reply.send(body.hits.hits)
})聚合搜索
// www.javascriptcn.com code example
fastify.get('/search', async (request, reply) => {
const { q } = request.query
const { body } = await client.search({
index: 'myindex',
body: {
query: { match: { content: q } },
aggs: {
categories: { terms: { field: 'category' } }
}
}
})
reply.send(body.aggregations.categories.buckets)
})结语
本文介绍了在 Fastify 中使用 ElasticSearch 进行数据搜索的方法,包括创建 ElasticSearch 客户端、创建搜索 API、以及一些高级搜索功能的示例代码。希望能对读者有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d5416ca941bf71349b7836