文档
指南
从 Algolia 迁移到 Elasticsearch

从 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);
}

Apache 2.0 2024 © Joseph McElroy。
需要帮助?加入 Discord