Elasticsearch是什么?
Elasticsearch是一个分布式搜索和分析引擎,也是可扩展的数据存储和向量数据库,针对生产规模的工作负载在速度和相关性方面进行了优化。它是Elastic开放堆栈平台的基础。借助Elasticsearch,可以对海量数据集进行近实时搜索、执行向量搜索、与生成式AI应用集成等等。其应用场景包括:检索增强生成(RAG)、向量搜索、全文搜索、日志分析、指标监控、应用性能监控(APM)、安全日志分析等。
若想了解Elasticsearch的更多特性和功能,可访问产品页面。若要获取有关机器学习创新以及Elastic对最新Lucene贡献的信息,可在Search Labs中找到更多内容。
如何快速上手Elasticsearch?
设置Elasticsearch最简单的方法是在Elastic Cloud上使用Elasticsearch Service创建托管部署。如果想自行安装和管理Elasticsearch,可以从elastic.co/downloads/elasticsearch下载最新版本。
本地运行Elasticsearch要注意什么?
注意:请勿将这些说明用于生产部署,此设置仅用于本地开发和测试。
使用 `start-local` 脚本可以在Docker中快速为本地开发或测试设置Elasticsearch和Kibana。
前提条件:如果尚未安装Docker,需为操作系统下载并安装Docker Desktop。如果使用的是Microsoft Windows,则需要安装适用于Linux的Windows子系统(WSL)。
试用许可证:此设置附带一个为期一个月的试用许可证,包含Elastic的所有功能。试用期满后,许可证将恢复为免费开源的Basic版本。更多信息请参考Elastic订阅计划。
如何运行 `start-local`?
要在本地设置Elasticsearch和Kibana,需运行 `start-local` 脚本:
curl -fsSL https://elastic.co/start-local | sh
该脚本会创建一个 `elastic-start-local` 文件夹,其中包含配置文件,并使用Docker启动Elasticsearch和Kibana。运行脚本后,可以通过以下端点访问Elastic服务:
Elasticsearch: http://localhost:9200
Kibana: http://localhost:5601
脚本会为 `elastic` 用户生成一个随机密码,该密码会在安装结束时显示,并存储在 `.env` 文件中。
注意:此设置仅用于本地测试,HTTPS已禁用,Elasticsearch使用基本身份验证。出于安全考虑,Elasticsearch和Kibana仅可通过本地主机访问。
怎样进行API访问?
Elasticsearch的API密钥会生成并存储在 `.env` 文件中,名为 `ES_LOCAL_API_KEY`。可以使用此密钥通过编程语言客户端或REST API连接到Elasticsearch。在 `elastic-start-local` 文件夹中,使用 `curl` 检查与Elasticsearch的连接:
source .env
curl $ES_LOCAL_URL -H "Authorization: ApiKey ${ES_LOCAL_API_KEY}"
若要使用 `elastic` 用户的密码,需设置并导出 `ES_LOCAL_PASSWORD` 环境变量,例如:
source .env
export ES_LOCAL_PASSWORD
如何向Elasticsearch发送请求?
可以通过REST API向Elasticsearch发送数据和其他请求。可以使用任何发送HTTP请求的客户端与Elasticsearch进行交互,例如Elasticsearch语言客户端和 `curl`。
如何使用 `curl` 发送请求?
以下是一个使用基本身份验证创建新Elasticsearch索引的 `curl` 命令示例:
curl -u elastic:$ES_LOCAL_PASSWORD \ -X PUT \ http://localhost:9200/my-new-index \ -H 'Content-Type: application/json'
如何使用语言客户端连接?
若要使用语言客户端连接到本地开发的Elasticsearch集群,可以使用 `elastic` 用户名和存储在 `ES_LOCAL_PASSWORD` 环境变量中的密码进行基本身份验证。连接信息如下:
Elasticsearch端点: http://localhost:9200
用户名: elastic
密码: $ES_LOCAL_PASSWORD(在环境变量中设置的值)
例如,使用Python的 `elasticsearch` 客户端进行连接:
import os
from elasticsearch import Elasticsearch
username = 'elastic'
password = os.getenv('ES_LOCAL_PASSWORD') # 在环境变量中设置的值
client = Elasticsearch(
"http://localhost:9200",
basic_auth=(username, password)
)
print(client.info())
如何使用开发工具控制台?
Kibana的开发控制台提供了一种简单的方式来试验和测试请求。要访问控制台,打开Kibana,然后转到“管理”>“开发工具”。
怎样添加数据到Elasticsearch?
可以通过REST API将JSON对象(文档)索引到Elasticsearch中。无论拥有的是结构化或非结构化文本、数值数据还是地理空间数据,Elasticsearch都能高效地存储和索引这些数据,以支持快速搜索。
对于带有时间戳的数据,如日志和指标,通常将文档添加到由多个自动生成的后备索引组成的数据流中。
如何添加单个文档?
要向索引中添加单个文档,可提交一个针对该索引的HTTP POST请求:
POST /customer/_doc/1
{
"firstname": "Jennifer",
"lastname": "Walters"
}
此请求会在 `customer` 索引不存在时自动创建该索引,添加一个ID为1的新文档,并存储和索引 `firstname` 和 `lastname` 字段。新文档可立即从集群中的任何节点检索,可以使用指定文档ID的GET请求来获取它:
GET /customer/_doc/1
如何添加多个文档?
若要在一个请求中添加多个文档,可使用 `_bulk` API。批量数据必须是换行分隔的JSON(NDJSON),每行必须以换行符(` `)结尾,包括最后一行。
PUT customer/_bulk
{ "create": { } }
{ "firstname": "Monica", "lastname": "Rambeau" }
{ "create": { } }
{ "firstname": "Carol", "lastname": "Danvers" }
{ "create": { } }
{ "firstname": "Wanda", "lastname": "Maximoff" }
{ "create": { } }
{ "firstname": "Jennifer", "lastname": "Takeda" }
如何进行搜索?
索引后的文档可进行近实时搜索。以下搜索会匹配 `customer` 索引中所有名字为Jennifer的客户:
GET customer/_search
{
"query": {
"match": {
"firstname": "Jennifer"
}
}
}
怎样探索数据?
可以使用Kibana中的“发现”功能来交互式地搜索和过滤数据。从这里,可以开始创建可视化图表、构建和共享仪表盘。
要开始使用,需创建一个连接到一个或多个Elasticsearch索引、数据流或索引别名的数据视图。转到“管理”>“堆栈管理”>“Kibana”>“数据视图”,选择“创建数据视图”,输入数据视图的名称和匹配一个或多个索引的模式,如 `customer`,然后选择“保存数据视图到Kibana”。要开始探索数据,转到“分析”>“发现”。
如何进行升级?
若要从早期版本的Elasticsearch进行升级,请参阅Elasticsearch升级文档。
怎样从源代码构建?
Elasticsearch使用Gradle作为其构建系统。要为本地操作系统构建发行版并在完成后打印其输出位置,请运行:
./gradlew localDistro
要为其他平台构建发行版,请运行相关命令:
./gradlew :distribution:archives:linux-tar:assemble
./gradlew :distribution:archives:darwin-tar:assemble
./gradlew :distribution:archives:windows-zip:assemble
发行版将输出到 `distribution/archives` 目录。要运行测试套件,请参阅 `TESTING`。
在哪里查看文档?
完整的Elasticsearch文档请访问elastic.co。有关文档流程的信息,请参阅文档的README。
有哪些示例和指南?
`elasticsearch-labs` 仓库包含可执行的Python笔记本、示例应用程序以及用于测试Elasticsearch在向量搜索、混合搜索和生成式AI用例的资源。
如何进行贡献?
有关贡献指南,请参阅 `CONTRIBUTING`。
怎样反馈与获取支持?
如果发现了bug或有功能请求,请在GitHub上创建一个Issue。请确保没有其他人已经为同一主题创建了Issue。如果在使用Elasticsearch时需要帮助,可以在Elastic论坛或Slack上寻求帮助,社区成员或Elastic工程师将很乐意协助。