ElasticSearch

目录

一、安装

二、Elasticsearch 中的一些概念

三、具体理解


一、安装


1. 下载镜像


docker pull elasticsearch:7.6.2
docker pull kibana:7.6.2
 

创建/usr/local/docker/es路径和其下config和data两个文件夹
3. 分配权限
cd /usr/local/docker/es/
 

chmod -R 777 /usr/local/docker/es/
chmod -R 777 /usr/local/docker/es/config
chmod -R 777 /usr/local/docker/es/data



4. 添加访问权限
echo "http.host: 0.0.0.0" > /usr/local/docker/es/config/elasticsearch.yml
5. 启动Elasticsearch

docker run --name es -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /usr/local/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/docker/es/data:/usr/share/elasticsearch/data \
-v /usr/local/docker/es/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.6.2



6. 访问Elasticsearch
http://192.168.43.143:9200


7. 启动Kibana

docker run --name kibana -e ELASTICSEARCH_HOSTS=dockerip:9200 -p 5601:5601 -d kibana:7.6.2

使用点击Dev Tools,在弹出的页面里点击Dismiss


# 增  /student/_doc/1  student是表名,_doc是文档类型的记录,1是主键的值;
POST /student/_doc/1
{
  "id":"1",
  "name":"张三",
  "age":21,
  "scoreList":[
    {"id":"1","name":"数学", "score":95},
    {"id":"2","name":"语文", "score":98},
    {"id":"3","name":"外语", "score":90}
  ]
}

POST /student/_doc/2
{
  "id":"2",
  "name":"李四",
  "age":22,
  "scoreList":[
    {"id":"4","name":"数学", "score":85},
    {"id":"5","name":"语文", "score":88},
    {"id":"6","name":"外语", "score":80}
  ]
}

POST /student/_doc/3
{
  "id":"3",
  "name":"王五",
  "age":23,
  "scoreList":[
    {"id":"7","name":"数学", "score":75},
    {"id":"8","name":"语文", "score":78},
    {"id":"9","name":"外语", "score":70}
  ]
}

# 查
GET /student/_doc/3
# 查所有
GET /student/_search    

# 改
PUT /student/_doc/3
{
  "id":"3",
  "name":"王六",
  "age":26,
  "scoreList":[
    {"id":"7","name":"数学", "score":65},
    {"id":"8","name":"语文", "score":78},
    {"id":"9","name":"外语", "score":70}
  ]
}

# 删
DELETE /student/_doc/3

也可以使用postman测试

二、Elasticsearch 中的一些概念


集群(cluster)
代表一个集群,集群中有多个节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es 的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看 es 集群,在逻辑上是个整体,你与任何一个节点的通信和与整个 es 集群通信是等价的

索引(index)
ElasticSearch 将它的数据存储在一个或多个索引(index)中,用 SQL 领域的术语来类比,索引就像数据库,可以向索引写入文档或者从索引中读取文档,并通过ElasticSearch 内部使用 Lucene 将数据写入索引或从索引中检索数据

文档(document)
文档(document)是 ElasticSearch 中的主要实体,对所有使用 ElasticSearch的案例来说,他们最终都可以归结为对文档的搜索,文档由字段构成

映射(mapping)
所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping),一般由用户自己定义规则

类型(type)
每个文档都有与之对应的类型(type)定义,这允许用户在一个索引中存储多种文档类型,并为不同文档提供类型提供不同的映射

分片(shards)
代表索引分片,es 可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索,分片的数量只能在索引创建前指定,并且索引创建后不能更改,5.X 默认不能通过配置文件定义分片

副本(replicas)
代表索引副本(备份),es 可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复,二是提高 es 的查询效率,es 会自动对搜索请求进行负载均衡

数据恢复(recovery)
代表数据恢复或叫数据重新分布,es 在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复

GET /_cat/health?v #可以看到集群状态
数据源(River)
代表 es 的一个数据源,也是其它存储方式(如:数据库)同步数据到 es 的一个方

法,它是以插件方式存在的一个 es 服务,通过读取 river 中的数据并把它索引到 es

中,官方的 river 有 couchDB 的,RabbitMQ 的,Twitter 的,Wikipedia 的

网关(gateway)
代表 es 索引的持久化存储方式,es 默认是先把索引存放到内存中,当内存满了时再持久化到硬盘,当这个 es 集群关闭再重新启动时就会从 gateway 中读取索引数据,es 支持多种类型的 gateway,有本地文件系统(默认),分布式文件系统,Hadoop的 HDFS 和 amazon 的 s3 云存储服务

自动发现(discovery.zen)
代表 es 的自动发现节点机制,es 是一个基于 p2p 的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互

5.X 关闭广播,需要自定义
通信(Transport)
代表 es 内部节点或集群与客户端的交互方式,默认内部是使用 tcp 协议进行交互,同时它支持 http 协议(json 格式)、thrift、servlet、memcached、zeroMQ 等的传输协议(通过插件方式集成)

节点间通信端口默认: 9300-9400
分片和复制(shards and replicas)
(1).分片
一个索引可以存储超出单个结点硬件限制的大量数据,比如,一个具有 10 亿文档的索引占据 1TB 的磁盘空间,而任一节点可能没有这样大的磁盘空间来存储或者单个节点处理搜索请求,响应会太慢。为了解决这个问题,Elasticsearch 提供了将索引划分成多片的能力,这些片叫做分片。当创建一个索引的时候,可以指定想要的分片的数量,每个分片本身也是一个功能完善并且独立的“索引”,这个“索引” 可以被放置到集群中的任何节点上

分片之所以重要,主要有两方面的原因:

允许水平分割/扩展内容容量

允许在分片(位于多个节点上)之上进行分布式的、并行的操作,进而提高性能/吞吐量

至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由 Elasticsearch 管理的
(2).复制
在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点因为某些原因处于离线状态或者消失的情况下,故障转移机制是非常有用且强烈推荐的,为此, Elasticsearch 允许创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制

复制之所以重要,有几个主要原因:

在分片/节点失败的情况下,复制提供了高可用性,复制分片不与原/主要分片置于同一节点上是非常重要的。因为搜索可以在所有的复制上并行运行,复制可以扩展你的搜索量/吞吐量

总之,每个索引可以被分成多个分片。一个索引也可以被复制 0 次(即没有复制)或多次,一旦复制了,每个索引就有了主分片(作为复制源的分片)和复制分片(主分片的拷贝)

分片和复制的数量可以在索引创建的时候指定,在索引创建之后,可以在任何时候动态地改变复制的数量,但是不能再改变分片的数量

5.X 默认 5:1 5 个主分片,1 个复制分片

默认情况下,Elasticsearch 中的每个索引分配 5 个主分片和 1 个复制,这意味着,如果集群中至少有两个节点,索引将会有 5 个主分片和另外 5 个复制分片(1 个完全拷贝),这样每个索引总共就有 10 个分片
五.使用 RESTAPI 来操作 ElasticSearch
简介
当 ElasticSearch 的实例并运行,可以使用 localhost:9200,基于 JSON 的 REST API ElasticSearch 进行通信,在 ElasticSearch 自己的文档中,所有示例都使用 curl, 但是,当使用 API 时也可使用图客户端(如  Fiddler 或  RESTClient),这样操作起更方便直观一些
浏览器也提供了操作 ElasticSearch 的插件, 比如: Chrome 插件 Sense, Sense 提供了一个专门用于使用 ElasticSearch 的 REST API 的简单用户界面, 它还具有许多方便的功能,由于网络问题的原因,也可以使用 火狐浏览器里面提供的 ElasticSearch-Head,比如:火狐浏览器的 ElasticSearch-Head

安装火狐 ElasticSearch-Head步骤  todo没找到

三、具体理解

index:是否索引,默认为 true

映射:  随便写  _doc   _mapping  为了记住      _type

curl -XPOST http://localhost:9200/goods/_mapping


type:类型,可以是 text、long、short、date、integer、object 等

store:是否存储,默认为 false

analyzer:分词器,这里的 ik_max_word 即使用 ik 分词器


(1).创建索引
curl -XPUT http://localhost:9200/goods

(2).创建类型以及配置映射
_mapping:映射标识
#配置映射url
curl -XPOST http://localhost:9200/goods/_mapping
创建配置映射以及类型

{ 
    "properties": {  #属性       
        "content": {  #映射名
            "type": "text",  #类型
            "analyzer": "ik_max_word",  #检索粒度
            "search_analyzer": "ik_smart"  #检索粒度
        }
    }
}

(3).查看映射
GET /goods/_mapping

(4).增加数据
_doc为默认值,以后官方可能会取消
POST /goods/_doc
{"content":"渔警调查:平均每天扣 1 艘渔船"}

(5).查询数据
_search:查询标识
POST /goods/_search
查询格式:

    "query" : { 
        "match" : { 
            "content" : "渔船" 
                }
            }, 
        "highlight" : { 
            "pre_tags" : ["<tag1>", "<tag2>"], 
            "post_tags" : ["</tag1>", "</tag2>"], 
            "fields" : { "content" : {}
        }
    }
}

(5).修改数据
9lkEDmkBLW9aMdEIICBc:数据唯一编号,相当于mysql中的主键
PUT /news/_doc/9lkEDmkBLW9aMdEIICBc
{
"content": "渔警冲突调查:平均每天扣 1 艘渔船xxx" 
}

(6).删除数据
DELETE /news/_doc/9lkEDmkBLW9aMdEIICBc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值