Elasticsearch 是一款开源的分布式搜索引擎,专为全文搜索、结构化数据搜索和分析而设计。它属于 NoSQL 数据库范畴,但其主要用途是搜索和分析大规模的文本和数据。Elasticsearch 具有高扩展性、实时搜索和分布式架构等特点,被广泛应用于日志分析、搜索引擎、推荐系统等场景。
以下是 Elasticsearch 从安装到开发的全流程总结,适用于 CentOS 7 服务器和本地开发环境。
首先,确保 CentOS 7 已经安装 wget
,并添加 Elasticsearch 的 yum 源。
sudo yum install -y wget
sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.0-x86_64.rpm
sudo rpm --install elasticsearch-7.10.0-x86_64.rpm
Elasticsearch 的配置文件位于 /etc/elasticsearch/elasticsearch.yml
,你可以通过编辑该文件进行设置:
sudo vi /etc/elasticsearch/elasticsearch.yml
一些重要的配置项:
cluster.name: my-cluster
。node.name: node-1
。network.host: 0.0.0.0
以允许外部访问。sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
你可以通过 HTTP 请求验证 Elasticsearch 是否成功启动:
curl -X GET "localhost:9200/"
若一切正常,将返回 Elasticsearch 的基本信息,如版本号等。
可以通过 POST
请求将文档插入 Elasticsearch 索引。
curl -X POST "localhost:9200/my_index/_doc/1" -H 'Content-Type: application/json' -d'
{
"name": "Alice",
"age": 30,
"city": "New York"
}'
该命令会在 my_index
索引中插入一条文档,ID 为 1。
使用 GET
请求来查询数据。
简单查询:
curl -X GET "localhost:9200/my_index/_search?q=name:Alice"
复杂查询:
使用 POST
请求可以进行更复杂的查询,如多字段匹配:
curl -X POST "localhost:9200/my_index/_search" -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"must": [
{ "match": { "name": "Alice" } },
{ "range": { "age": { "gte": 25 } } }
]
}
}
}'
使用 POST
请求可以更新已有文档中的数据。
curl -X POST "localhost:9200/my_index/_update/1" -H 'Content-Type: application/json' -d'
{
"doc": {
"age": 31
}
}'
使用 DELETE
请求可以删除索引或文档。
删除文档:
curl -X DELETE "localhost:9200/my_index/_doc/1"
删除整个索引:
curl -X DELETE "localhost:9200/my_index"
在 Elasticsearch 中,映射(mapping)定义了字段的数据类型以及如何处理这些字段。例如,可以将 age
字段设置为整数类型。
curl -X PUT "localhost:9200/my_index" -H 'Content-Type: application/json' -d'
{
"mappings": {
"properties": {
"name": { "type": "text" },
"age": { "type": "integer" },
"city": { "type": "keyword" }
}
}
}'
Elasticsearch 强大的聚合功能允许对数据进行分组和统计。以下示例展示了按城市进行分组,并计算每个城市的用户数量。
curl -X POST "localhost:9200/my_index/_search" -H 'Content-Type: application/json' -d'
{
"size": 0,
"aggs": {
"group_by_city": {
"terms": { "field": "city.keyword" }
}
}
}'
在生产环境中,Elasticsearch 通常运行在集群模式下,多个节点组成集群。通过分片和副本配置,可以管理和扩展集群容量。
查看分片状态:
curl -X GET "localhost:9200/_cat/shards"
动态调整副本数:
curl -X PUT "localhost:9200/my_index/_settings" -H 'Content-Type: application/json' -d'
{
"index": {
"number_of_replicas": 2
}
}'
为了更方便地管理和分析 Elasticsearch 中的数据,可以使用 Kibana,它是 Elastic Stack 的一部分,主要用于数据可视化。
sudo yum install kibana -y
sudo systemctl start kibana
sudo systemctl enable kibana
Kibana 启动后,默认通过 http://localhost:5601
访问。你可以通过 Kibana 的图形界面来进行数据分析和可视化。