文档
指南
设置 Elasticsearch

设置和连接到 Elasticsearch

连接到 Elasticsearch 的最简单方法是使用 Elastic Cloud。您可以注册免费试用帐户并立即开始使用。

使用 Docker

如果您使用的是 Docker,可以使用以下命令运行 Elasticsearch

拉取 Elasticsearch Docker 镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.6.2

为 Elastic 创建一个 Docker 网络

docker network create elastic

启动 Elasticsearch

docker run --name elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "xpack.security.enabled=false" -e http.cors.enabled=true -e "http.cors.allow-origin='*'" -e http.cors.allow-headers=X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization -e http.cors.allow-credentials=true -e network.publish_host=localhost -e xpack.security.enabled=false docker.elastic.co/elasticsearch/elasticsearch:8.6.2

在此示例中,我们禁用了安全性,但您可以在官方文档中阅读更多关于保护 Elasticsearch (在新标签页中打开)的信息。

您将能够在主机 https://127.0.0.1:9200 访问 Elasticsearch。

通过 Docker 使用 Opensearch

拉取 Opensearch Docker 镜像

docker pull opensearchproject/opensearch:1.2.4

启动 Opensearch

docker run --name opensearch --rm -d -p 9200:9200 -e http.port=9200 -e discovery.type=single-node -e http.max_content_length=10MB -e http.cors.enabled=true -e "http.cors.allow-origin='*'" -e http.cors.allow-headers=X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization -e http.cors.allow-credentials=true opensearchproject/opensearch:1.2.4

您将能够在主机 https://127.0.0.1:9200 访问 Opensearch。

使用 Elastic Cloud

要连接到 Elastic Cloud,您需要创建一个帐户并获取您的凭据。您可以按照Elastic Cloud 网站 (在新标签页中打开)上的说明进行操作。

设置部署后,请执行以下操作

  1. 转到Elastic Cloud 控制台 (在新标签页中打开)
  2. 单击您要连接到的部署。
  3. 找到 Cloud ID 或 Elasticsearch URL 并复制它。
  4. 将 URL 粘贴到 Node 应用的配置对象中的 connection.cloud_idconnection.host 字段中。

使用用户名:密码连接

创建部署时,将为您提供用户和密码。您可以在配置对象中设置 connection.auth.usernameconnection.auth.password 字段。

const client = Client({
  connection: {
    cloud_id: "ELASTICSEARCH_CLOUD_ID",
    // or optionally the elasticsearch host
    // host: "ELASTICSEARCH_URL",
    auth: {
      username: "elastic",
      password: "changeme"
    }
  }
})

使用 API 密钥连接

使用 read 权限为索引创建 API 密钥。

您需要传递一个 Authorization 标头才能创建 API 密钥。

curl --location --request POST 'https://127.0.0.1:9200/_security/api_key' \
--header 'Content-Type: application/json' \
-u 'elastic:changeme' \
--data-raw '{
  "name": "Elastic Search API Key",
  "role_descriptors": { 
    "role-a": {
      "cluster": ["all"],
      "index": [
        {
          "names": ["<index-name>"],
          "privileges": ["read"]
        }
      ]
    }
    
  }
}'

将 API 密钥 编码后粘贴到 connection.apiKey 字段中。

const client = Client({
  connection: {
    host: "ELASTICSEARCH_URL",
    apiKey: "API_KEY"
  }
})

您也可以通过转到 Kibana 中的 堆栈管理 > API 密钥 并创建一个新的 API 密钥来完成此操作。

如果 Searchkit 无法连接到 Elasticsearch,它将抛出一个错误。您应该能够在运行 Node API 的终端中看到该错误。

您还可以打开 Node 应用配置对象中的 debug 标志,以查看更详细的日志。

使用自定义标头连接到 Elasticsearch

如果您正在使用带有代理的 Elasticsearch,则可能需要向请求添加自定义标头。您可以在 Node 应用的配置对象中设置 connection.headers 字段来实现。

const client = Client({
  connection: {
    host: "https://127.0.0.1:9200",
    headers: {
      "X-My-Header": "My-Value"
    }
  }
})

自定义传输

如果以上所有方法都失败,您可以构建自己的自定义传输。您可以通过实现 Transporter 接口来做到这一点。

 
import { ESTransporter } from 'searchkit'
import type { SearchRequest } from "searchkit"
 
class MyTransporter extends ESTransporter {
  async performNetworkRequest(requests: SearchRequest[]) {
    // you can use any http client here
    return fetch(`https://127.0.0.1:9200/_msearch`, {
      headers: {
        // Add custom headers here
      },
      body: this.createElasticsearchQueryFromRequest(requests),
      method: 'POST'
    })
  }
}
 
// then pass the custom transporter to the client
const client = Client({
  connection: new MyTransporter()
});

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