1、简介
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。
Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。
Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。”Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。“相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。
Elasticsearch使用Lucene,并试图通过JSON和Java API提供其所有特性。它支持facetting和percolating,如果新文档与注册查询匹配,这对于通知非常有用。另一个特性称为“网关”,处理索引的长期持久性;例如,在服务器崩溃的情况下,可以从网关恢复索引。Elasticsearch支持实时GET请求,适合作为NoSQL数据存储,但缺少分布式事务。
2、安装
docker search elasticsearch
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
elasticsearch Elasticsearch is a powerful open source sear… 4946 [OK]
nshou/elasticsearch-kibana Elasticsearch-7.10.1 Kibana-7.10.1 126 [OK]
mobz/elasticsearch-head elasticsearch-head front-end and standalone … 71
elastichq/elasticsearch-hq Official Docker image for ElasticHQ: Elastic… 71 [OK]
itzg/elasticsearch Provides an easily configurable Elasticsearc… 71 [OK]
elastic/elasticsearch The Elasticsearch Docker image maintained by… 50
bitnami/elasticsearch Bitnami Docker Image for Elasticsearch 38 [OK]
taskrabbit/elasticsearch-dump Import and export tools for elasticsearch 27 [OK]
lmenezes/elasticsearch-kopf elasticsearch kopf 18 [OK]
barnybug/elasticsearch Latest Elasticsearch 1.7.2 and previous rele… 17 [OK]
justwatch/elasticsearch_exporter Elasticsearch stats exporter for Prometheus 16
blacktop/elasticsearch Alpine Linux based Elasticsearch Docker Image 15 [OK]
esystemstech/elasticsearch Debian based Elasticsearch packing for Lifer… 15
monsantoco/elasticsearch ElasticSearch Docker image 11 [OK]
mesoscloud/elasticsearch [UNMAINTAINED] Elasticsearch 9 [OK]
centerforopenscience/elasticsearch Elasticsearch 4 [OK]
dtagdevsec/elasticsearch elasticsearch 4 [OK]
bitnami/elasticsearch-exporter Bitnami Elasticsearch Exporter Docker Image 3 [OK]
barchart/elasticsearch-aws Elasticsearch AWS node 3
axway/elasticsearch-docker-beat "Beat" extension to read logs of containers … 1 [OK]
jetstack/elasticsearch-pet An elasticsearch image for kubernetes PetSets 1 [OK]
phenompeople/elasticsearch Elasticsearch is a powerful open source sear… 1 [OK]
wreulicke/elasticsearch elasticsearch 0 [OK]
travix/elasticsearch-kubernetes To run ElasticSearch in kubernetes and expor… 0 [OK]
backplane/elasticsearch-curator Elasticsearch Curator (https://github.com/el… 0
可以看出以上仓库里有很多版本的elasticsearch,看出来第一个是官方的仓库,查看官网版本目前最新的是7.12.0,但是考虑到稳定性,本次安装使用的是7.8.0
安装命令:
docker pull elasticsearch:7.8.0
安装成功以后,使用
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker101tutorial latest 27e5e7fc7a51 40 hours ago 27.9MB
docker/getting-started latest 3ba8f2ff0727 3 weeks ago 27.9MB
hello-world latest d1165f221234 5 weeks ago 13.3kB
alpine/git latest a939554ad0d0 7 weeks ago 25.1MB
kibana 7.8.0 df0a0da46dd1 9 months ago 1.29GB
elasticsearch 7.8.0 121454ddad72 9 months ago 810MB
镜像已经下载成功。
3、启动
命令:
docker run --name elasticsearch -m 2G --restart always -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.8.0
启动成功后,在浏览器中输入http://localhost:9200
代表安装成功
4、使用
4.1、插入数据
使用postman插入数据
如下是返回的值
{
"_index": "my-first-index-001",
"_type": "_doc",
"_id": "_kO0ungBBLJPJ0UEA6Kd",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 2,
"_primary_term": 1
}
4.2、查询数据
4.2.1、全条件匹配查询
返回的值:
{
"took": 223,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 1,
"hits": [
{
"_index": "my-first-index-001",
"_type": "_doc",
"_id": "9kN9tngBBLJPJ0UExaJQ",
"_score": 1,
"_source": {
"name": "aaron",
"age": 30
}
},
{
"_index": "my-first-index-001",
"_type": "_doc",
"_id": "-EONtngBBLJPJ0UEt6Ly",
"_score": 1,
"_source": {
"name": "chen"
}
},
{
"_index": "my-first-index-001",
"_type": "_doc",
"_id": "_kO0ungBBLJPJ0UEA6Kd",
"_score": 1,
"_source": {
"name": "哈哈",
"age": 3
}
}
]
}
}
可以看出,上面有已经插入成功那条数据
4.2.2、特定条件查询
返回的值
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.0925692,
"hits": [
{
"_index": "my-first-index-001",
"_type": "_doc",
"_id": "9kN9tngBBLJPJ0UExaJQ",
"_score": 1.0925692,
"_source": {
"name": "aaron",
"age": 30
}
}
]
}
}