从 Algolia 迁移到 Elasticsearch 并使用 Searchkit
我们收到的最常见问题之一是如何从 Algolia 迁移到 Elasticsearch。借助 Searchkit v4 和 Instantsearch 支持,我们使从 Algolia 迁移到 Elasticsearch 比以往任何时候都更容易。在这篇文章中,我们将向您展示如何使用 Searchkit 从 Algolia 迁移到 Elasticsearch。
设置 Elasticsearch
设置和维护我们自己的搜索引擎集群可能非常耗时。我们将为此使用 Elastic Cloud,但设置可以与在任何地方托管的 ElasticSearch 索引一起使用。
您可以阅读更多关于如何设置 Elasticsearch (在新标签页中打开)和索引数据 (在新标签页中打开)。
设置 Searchkit 和 Instantsearch 客户端
安装 Searchkit 和 Instantsearch 客户端的依赖项。
yarn add searchkit @searchkit/instantsearch-client
并设置 Searchkit 的配置。
import Searchkit from "searchkit"
import Client from '@searchkit/instantsearch-client'
const sk = new Searchkit({
connection: {
host: 'https://commerce-demo.es.us-east4.gcp.elastic-cloud.com:9243',
apiKey: 'a2Rha1VJTUJMcGU4ajA3Tm9fZ0Y6MjAzX2pLbURTXy1hNm9SUGZGRlhJdw=='
},
search_settings: {
// attributes to highlight or snippet
highlight_attributes: ['title'],
snippet_attributes: ['plot'],
search_attributes: [{ field: 'title', weight: 3 }, 'actors', 'plot'],
result_attributes: ['title', 'actors', 'poster', 'plot'],
facet_attributes: [
'type',
{ attribute: 'actors', field: 'actors.keyword', type: 'string' },
'rated',
{ attribute: 'imdbrating', type: 'numeric', field: 'imdbrating' },
{ attribute: 'metascore', type: 'numeric', field: 'metascore' }
],
}
)
使用 Instantsearch 客户端
然后我们可以使用 Searchkit 的 Instantsearch 客户端连接到 Searchkit。
import Client from '@searchkit/instantsearch-client'
const searchClient = Client(searchkitClient);
export default function App() {
return (
<InstantSearch searchClient={searchClient} indexName="movies">
<Configure hitsPerPage={10} />
<SearchBox />
<Hits hitComponent={MovieHits} />
<Pagination />
</InstantSearch>
);
}
通过 Node 代理搜索请求
我们可以使用代理将 Searchkit 的请求转发到 Elasticsearch。建议在生产环境中使用此方法。
yarn add @searchkit/api
以下是一个将请求代理到 Elasticsearch 的 Next.js API 处理程序示例。
import Client from "@searchkit/api";
import { NextApiRequest, NextApiResponse } from "next";
const client = Client({
connection: {
host: "<elasticsearch-host>",
apiKey: "<api-key>", // optional
},
search_settings: {
// ... search settings
},
});
// example API handler for Next.js
export default async function handler(
req,
res
) {
const results = await client.handleRequest(req.body);
res.send(results);
}