搜索功能是现代应用程序的必要功能之一。ElasticSearch 是一个强大的搜索引擎,它提供了快速、准确、可扩展的搜索能力。本文将介绍如何在 Hapi 中集成 ElasticSearch 实现搜索功能。
安装 ElasticSearch
首先,需要安装 ElasticSearch。可以从官网下载并安装 ElasticSearch,也可以使用 Docker 运行 ElasticSearch。
使用 Docker 运行 ElasticSearch 的方法如下:
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.10.2
这将在本地启动 ElasticSearch,可以通过 http://localhost:9200
访问 ElasticSearch。
安装依赖
在 Hapi 项目中使用 ElasticSearch,需要安装 @elastic/elasticsearch
包。
npm install @elastic/elasticsearch
集成 ElasticSearch
在 Hapi 项目中集成 ElasticSearch,需要创建一个 ElasticSearch 客户端并将其注入到路由中。
// javascriptcn.com 代码示例 const { Client } = require('@elastic/elasticsearch'); const client = new Client({ node: 'http://localhost:9200' }); server.route({ method: 'GET', path: '/search', handler: async (request, h) => { const { q } = request.query; const { body } = await client.search({ index: 'myIndex', body: { query: { match: { myField: q, }, }, }, }); return body.hits.hits.map(hit => hit._source); }, });
在上面的示例中,我们创建了一个 ElasticSearch 客户端,并将其注入到路由中。当请求 /search
路径时,将从查询参数中获取搜索关键字 q
,并使用 ElasticSearch 客户端搜索 myIndex
索引中 myField
字段包含关键字的文档。最后,返回搜索结果中的文档数据。
搜索建议
在搜索功能中,搜索建议是一个非常有用的功能。它可以帮助用户在输入搜索关键字时提供相关的搜索建议。ElasticSearch 提供了自动完成和纠错功能,可以用于搜索建议。
自动完成
自动完成功能可以根据用户输入的搜索关键字提供自动完成的建议。可以使用 ElasticSearch 的 suggest
API 实现自动完成功能。
// javascriptcn.com 代码示例 server.route({ method: 'GET', path: '/suggest', handler: async (request, h) => { const { q } = request.query; const { body } = await client.search({ index: 'myIndex', body: { suggest: { mySuggestion: { prefix: q, completion: { field: 'mySuggestField', }, }, }, }, }); return body.suggest.mySuggestion[0].options.map(option => option._source); }, });
在上面的示例中,我们使用 ElasticSearch 的 suggest
API 实现自动完成功能。当请求 /suggest
路径时,将从查询参数中获取搜索关键字 q
,并使用 ElasticSearch 客户端提供搜索建议。我们使用 completion
类型的字段 mySuggestField
来提供搜索建议。最后,返回搜索建议结果中的文档数据。
纠错
纠错功能可以在用户输入错误的搜索关键字时提供纠错建议。可以使用 ElasticSearch 的 didyoumean
插件实现纠错功能。
// javascriptcn.com 代码示例 server.route({ method: 'GET', path: '/didyoumean', handler: async (request, h) => { const { q } = request.query; const { body } = await client.search({ index: 'myIndex', body: { suggest: { mySuggestion: { text: q, phrase: { field: 'myField', size: 1, direct_generator: [{ field: 'myField', suggest_mode: 'always', }], }, }, }, }, }); return body.suggest.mySuggestion[0].options.map(option => option.text); }, });
在上面的示例中,我们使用 ElasticSearch 的 didyoumean
插件实现纠错功能。当请求 /didyoumean
路径时,将从查询参数中获取搜索关键字 q
,并使用 ElasticSearch 客户端提供纠错建议。我们使用 phrase
类型的字段 myField
来提供纠错建议。最后,返回纠错建议结果中的文本数据。
总结
本文介绍了如何在 Hapi 中集成 ElasticSearch 实现搜索功能。我们使用 ElasticSearch 的 match
查询实现了基本的搜索功能,使用 suggest
API 实现了自动完成功能,使用 didyoumean
插件实现了纠错功能。希望本文能对大家学习和使用 ElasticSearch 有所帮助。完整示例代码可以在我的 GitHub 仓库中找到:https://github.com/hellojukay/hapi-elasticsearch-example。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65780106d2f5e1655d1d3a3e