设置和连接到 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 网站 (在新标签页中打开)上的说明进行操作。
设置部署后,请执行以下操作
- 转到Elastic Cloud 控制台 (在新标签页中打开)。
- 单击您要连接到的部署。
- 找到 Cloud ID 或 Elasticsearch URL 并复制它。
- 将 URL 粘贴到 Node 应用的配置对象中的
connection.cloud_id
或connection.host
字段中。
使用用户名:密码连接
创建部署时,将为您提供用户和密码。您可以在配置对象中设置 connection.auth.username
和 connection.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()
});