Elasticsearch

一、介绍

        ElasticSearch是一个开源的高拓展的分布式全文检索引擎,它可以近乎实时地存储、检索数据。拓展性很好,可以拓展到处理PB级别的数据。

        ElasticSearch使用Java开发并使用Lucene作为其核心来实现所有的索引和搜索的功能。ElasticSearch通过简单的RESTFul API来隐藏Lucene的复杂性,从而使得全文检索变得简单。


二、ElasticSearch核心概念

        (1)Cluster(集群)

        ElasticSearch可以作为单节点的搜索服务器,但是,为了处理海量数据,实现高可用和容错,可以运行在集群上。

        (2)Node(节点)

        形成集群的单个服务器。

        (3)Shard(分片)

        当有大量的文档时,由于内存、磁盘的限制,无法足够快地响应客户端的请求,这种情况下,数据可以分为较小的数据集,放在不同的服务器上。

        当索引分布在不同的分片上时,ES会查询发送给每个相关的分片,并将结果组合在一起,应用无感知。

        (4)Replia(副本)

        为提高查询吞吐量,实现高可用性,可以使用分片副本。

        副本是一个分片的精确复制,每个分片可以有0个或多个副本,ES可以有很多相同的分片,其中之一被选择更改索引操作,这种特殊的分片被称为主分片。当主分片丢失(如主分片数据不可用)时,集群将副本提升为新的主分片。

        (5)全文检索

        全文检索就是对所有数据索引,可以根据关键字搜索,类似于Sql里的like。

        全文索引就是把内容根据词的意义进行分词,然后分别创建索引。

三、ElasticSearch和Mysql概念对比


        ★ 关系型数据库中,schema定义了表、每个表的字段,还有表与字段之间的关系。与之对应的,ES中Mapping定义了索引下的类型的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档,是否压缩原始JSON文档,是否需要分词处理,如何进行分词处理等。

       ★ 在数据库中的insert,delete,update,search操作等价于ES中的增(PUT/POST),删(Delete),改(_update),查(GET)。


四、安装ElasticSearch和head

        我参考的是这篇博客:

Windows10搭建ElasticSearch 并配置head

        通过elasticsearch-6.2.3\bin\elasticsearch.bat启动ElasticSearch,在elasticsearch-6.2.3\elasticsearch-head-master目录下执行grunt server启动head。

五、使用REST API操作ElasticSearch

        ElasticSearch提供了基于JSON的REST API与其通信,可以使用任何http客户端。

        我widows本地装了个ES,用的POST MAN发请求。

(1)_search可以匹配所有文档,我没有指定索引和类型,所以localhost:9200/_search查的是所有的文档

        

        ●  took:请求耗时; time_out:是否超时;_shards:分片情况;hits:查询结果

        请求GET localhost:9200/_cat/indices可以查看当前节点所有的索引。


(2)创建索引

        ElasticSearch会索引所有的字段,经过处理后写入一个反向索引(Inverted Index)。查库的时候直接查找该索引。

        所以,ElasticSearch数据库管理的 顶层单位就叫索引(Index),等于单个数据库。每个库(Index)的名字必须小写。

        如下请求创建一个索引:

    PUT localhost:9200/<index>/

返回JSON里的acknowledged表示操作是否成功。

(3)删除索引

DELETE localhost:9200/<index>

(4)创建文档

POST localhost:9200/<index>/<type>/[<id>]
PUT localhost:9200/<index>/<type>/<id>

        索引和类型是必须的,POST请求的id可以省略,es会自动生成一个随机id。id可以是数字可以是字符串。

        创建文档的前提是索引存在,否则会报错。


        通过localhost:9200/_search 命令查看所有数据,可以找到新put的数据:


(5)查看文档

GET localhost:9200/<index>/<type>/<id>/

(6)删除文档

DELETE localhost:9200/<index>/<type>/<id>

(7)更新文档

PUT localhost:9200/<index>/<type>/<id>

        update就是指定索引、文档、id重新PUT一次数据。

从返回JSON可以看到,_version变成了2,result为updated。


六、数据查询

(1)返回所有记录:_search

GET localhost:9200/<index>/_search
GET localhost:9200/<index>/<type>/_search


返回的JSON中 :

        took - 耗时(单位:毫秒),

        time_out - 是否超时,

        hit - 命中记录,

        total - 返回记录数,

        max_score - 最高匹配程度,

        _score - 匹配程度,每条记录都有一个_score,默认按照这个字段降序排序。

(2)全文搜索

        ⒈ match查询:匹配“字段”等于“值”的数据

POST localhost:9200/<index>/<type>/_scarch
{
  "query" : { "match" : {"字段" : "值"} }
}
        ★  ElasticSearch默认最大返回10条结果,可以通过size修改最大返回结果数:
POST localhost:9200/<index>/<type>/_scarch
{
  "query" : { "match" : {"字段" : "值"} },
  "size" : 1
}
        可以通过from指定位移:
POST localhost:9200/<index>/<type>/_scarch
{
  "query" : { "match" : {"字段" : "值"} },
  "size" : 1,
  "from" 1
}

上面查询意为,从位置1开始(默认0),值返回一条结果。

(3)逻辑运算

如果有多个关键字,ElasticSearch认为它是“or”关系

POST localhost:9200/accounts/person/_search
{
  "query" : { "match" : { "desc" : "软件 系统" }}
}

如果要执行and需使用布尔查询

POST localhost:9200/accounts/person/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "desc": "软件" } },
        { "match": { "desc": "系统" } }
      ]
    }
  }
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值