使用 Fastify 和 Elasticsearch 构建全文搜索 API

在 Web 开发中,搜索功能是至关重要的,为用户提供快速、准确的检索能力。Elasticsearch 是一个非常强大的全文搜索引擎,它支持高效的搜索、聚合、分析等功能。在本文中,我们将介绍如何使用 Fastify 和 Elasticsearch 构建全文搜索 API,让你的 Web 应用更强大,更易用。

建立 Elasticsearch 索引

在开始之前,我们需要建立一个 Elasticsearch 索引,以便存储我们要搜索的数据。以下是一个简单的例子,用于创建一个名为 books 的索引,它有一个字段 title,用于存储书籍的标题:

const { Client } = require('@elastic/elasticsearch')

const client = new Client({ node: 'http://localhost:9200' })

async function createBooksIndex() {
  await client.indices.create({
    index: 'books',
    body: {
      mappings: {
        properties: {
          title: { type: 'text' }
        }
      }
    }
  }, { ignore: [400] })
}

createBooksIndex()

在以上代码中,我们使用 @elastic/elasticsearch 库来连接 Elasticsearch 节点,并使用 indices.create() 方法来创建一个新的索引。我们使用了 ignore: [400] 配置项,以便忽略可能的已存在索引错误。

配置 Fastify 应用程序

接下来,我们将创建一个 Fastify 应用程序,并配置它以使用 Elasticsearch 进行全文搜索。我们将编写一个 POST 请求处理程序,用于接收搜索查询和查询字段,并将响应返回到客户端。

const fastify = require('fastify')({ logger: true })

fastify.post('/search', async (request, reply) => {
  const { query, field } = request.body

  const { body } = await client.search({
    index: 'books',
    body: {
      query: {
        match: { [field]: query }
      }
    }
  })

  reply.send(body)
})

fastify.listen(3000, (err) => {
  if (err) {
    fastify.log.error(err)
    process.exit(1)
  }
})

在以上代码中,我们首先创建了一个 Fastify 应用程序,并使用 fastify.post() 方法创建一个 POST 请求处理程序,它使用 client.search() 方法向 Elasticsearch 发出搜索请求,并将响应返回给客户端。

测试搜索 API

现在,我们已经建立了 Elasticsearch 索引,并配置了 Fastify 应用程序进行全文搜索。我们可以发送一个 POST 请求来测试搜索 API,以下是一个示例代码:

const axios = require('axios')

async function testSearch() {
  try {
    const response = await axios.post('http://localhost:3000/search', {
      query: 'JavaScript',
      field: 'title'
    })

    console.log(response.data)
  } catch (error) {
    console.error(error)
  }
}

testSearch()

在以上示例代码中,我们使用 axios 库发送一个 POST 请求,并传递搜索查询和查询字段。如果一切正常,我们应该收到一个响应,其中包含 Elasticsearch 返回的结果。

总结

在本文中,我们介绍了如何使用 Fastify 和 Elasticsearch 构建全文搜索 API。通过使用 Elasticsearch,我们可以实现高效的全文搜索、聚合、分析等功能。使用 Fastify 可以编写简单、快速的 Web 应用程序,并轻松地与 Elasticsearch 集成。希望这篇文章能够帮助你更好地利用这两个强大的技术,提高 Web 应用程序的检索能力和用户体验。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65961b48eb4cecbf2d9fd728


纠错反馈