ElasticSearch学习

1、ES介绍

elasticsearch(简称ES)是一个建立在Apache Lucene上的搜索引擎

ES功能特征:

(1)分布式近实时(从一个文档开始索引到能搜索到延迟1s左右)文件存储,并为每个字段建立索引,方便搜索

(2)实时分析的分布式搜索引擎

(3)可以扩展到上百台机器,处理PB级别的结构化或非结构化数据

2、ES基础概念

(1)域(Field):对应MySQL中的列

(2)文档(Document):对应MySQL中的行

(3)类型(Type):对应MySQL中的表格

(4)索引(名词):对应MySQL中的数据库

(5)索引(动词):将Document存储在索引中

(6)反向索引:每一个字段都会被创建一个反向索引,类似于MySQL中的字段索引

(7)分片:

  分片背景:由于硬件存在限制,单个节点可能容纳不了完整索引,例如某个索引包含十几亿的文档,如果机器硬盘只有几百G,可能存储不了

  什么是分片:将单个索引细分为片段存储到不同的节点(机器)上,这些片段叫做分片。

  如何指定分片:在创建索引时,可以指定需要的分片数量

  机制透明:分片分发的机制,以及它的文档如何汇总到搜索请求中完全由elasticsearch来管理,并且对于用户来说是透明的

  默认配置:默认情况下,每个索引(数据库)默认有5个主分片和1个副本,如果集群中至少有两个节点,则索引将具有5个分片,另外5个副本分片(相当于1个完整副本),每个索引(数据库)10个分片

3、ES与MySQL比较

(1)MySQL是基于行与列的关系型数据库,ES是面向文档型数据库

(2)ES不仅存储文档,还为文档建立索引,在此基础上可以检索、排序、过滤文档

         ES为每个Document的每个Field建立(反向)索引

4、ES基本操作

(1)启动

----普通方式启动

命令行:{ES_HOME}/bin/elasticsearch

----以后台服务方式启动

命令行:{ES_HOME}/bin/elasticsearch  -d

(2)停止

先查询elasticsearch进程ID:jps | grep elasticsearch

结束对应进程:kill -9 pid

(3)清空索引

5、ES存储结构图解


6、客户端如何与ES通信

(1)Java客户端

Elasticsearch 内置了两个客户端:

节点客户端: 节点客户端以一个 无数据节点 的身份加入了一个集群。换句话说,它自身是没有任何数据的,但是他知道什么数据在集群中的哪一个节点上,然后就可以请求转发到正确的节点上并进行连接。

传输客户端: 更加轻量的传输客户端可以被用来向远程集群发送请求。他并不加入集群本身,而是把请求转发到集群中的节点。

协议端口:使用 Elasticsearch 的 传输 协议,通过9300端口与 java 客户端进行通信。集群中的各个节点也是通过9300端口进行通信。如果这个端口被禁止了,那么你的节点们将不能组成一个集群

注意事项:Java 的客户端的版本号必须要与 Elasticsearch 节点所用的版本号一样,不然他们之间可能无法识别

(2)非Java客户端

通过HTTP向RESTful API传送json,具体是通过9200端口与 Elasticsearch 的 RESTful API 进行通信

(3)Java REST Client

  依赖Apache Http Async Client

  ------Java  Low Level  Rest  Client

  ------Java High Level Rest  Client



7、使用ES搜索

(1)使用ID检索(指定字段准确检索,相当于指定了_id=xxx)

GET /megacorp/employee/1

(2)使用简易检索

GET /megacorp/employee/_search

(3)使用带参数简易检索(指定字段准确检索,即检索只会针对last_name字段中的内容)

GET /megacorp/employee/_search?q=last_name:Smith

(4)使用Query DSL检索

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}

(5)使用带过滤器的搜索

GET /megacorp/employee/_search
{
    "query" : {
        "filtered" : {
            "filter" : {
                "range" : {
                    "age" : { "gt" : 30 } <1>
                }
            },
            "query" : {
                "match" : {
                    "last_name" : "Smith" <2>
                }
            }
        }
    }
}

(6)使用全文检索

       ---文档在被索引时,除了对每个字段的内容建立索引之外,还会自动将所有字段的内容拼接成一个_all字段,然后对这个_all字段的内容建立索引

       ---客户端没有指定【明确】字段进行检索,则默认是检索_all字段

       ---为了【更加智能】应对客户端检索需求,对_all字段建立索引时会使用一些小技巧:例如将dogs处理成dog、jump和leap等价........

       ---全文检索时,客户端的Query String同样会使用与建立索引时使用的Tokenizer进行分词后再触发检索

       ---全文检索自动对不同文档的检索匹配次数进行排序,形成一个相关度指标

(7)使用段落检索

(8)高亮检索结果

(9)mget批量检索

(10)设定_source指定返回字段

(11)Bulk批量执行多个请求(create、index、delete、update)



参考:http://www.learnes.net/getting_started/tutorial_search.html

----------------------------------------------------------------Windows下安装使用ES---------------------------------------------------------------------------------

1、  下载elasticsearch-2.3.5.zip

2、  启动:

切换目录:cd  E:\elasticsearch-2.3.5\bin

运行:elasticsearch.bat

3、  安装ElasticSearchHead插件

切换目录:cd  E:\elasticsearch-2.3.5\bin

运行:plugin  install  mobz/elasticsearch-head

4、  Elasticsearch CRUD客户端Sense(不支持中文)

URL格式:http://localhost:9200/<index>/<type>/[<id>]

其中index、type是必须提供的;

id是一条数据(文档)的唯一标识,如果重复 则覆盖已经存在的;

 index、type将信息进行分层,利于管理。index可以理解为数据库,type理解为数据表

5、  Sense操作

(1)      添加

PUT /gag_user/person/3

{

               "name":"lisi",

               "age": 30,

               "intro": "productmanager"

            }

注意:PUT需要顶头写,json字段名称需要加引号

(2)      修改/覆盖

操作同添加一样,只是修改需要将id置为和存在的记录一致

(3)      删除

DELETE /gag_user/person/4

{

               "name":"liup",

               "age": 29,

               "intro": "javaprogrammer"

  }

 

(4)      查询

查询所有库,所有表的文档

GET/_search

{

    "query": { "match_all":{} }  

}

 

查询指定库指定表的一条文档

GET  /gag_user/person/2

 

在所有库所有表中查找某个字段等于某个值的文档

GET/_search

{

    "query": {

        "query_string": {"query": "lisi" }

    }

}

 

在指定库指定表中查找某个字段等于某个值的文档

POST  /gag_user/person/_search

{

    "query": {

        "query_string": {"query": "wangwu" }

    }

}

 

在指定库指定表中查找指定个字段等于某个值的文档

POST  /gag_user/person/_search

{

  "query": {

     "query_string": {

        "fields": ["age"],

        "query": 30

     }

  }

}

 

多条件并列条件查询

POST  /gag_user/person/_search

{

  "query": {

        "filtered": {          

            "filter": {

                "term": {

                    "age": 30

                }               

            }

        }

    }

}

(5)      更多操作参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

6、  Elasticsearch  Head插件

       基本查询和复合查询也可以完成基本的CRUD操作

7、  Kibana可以专门用来查看ElasticSearch内容的工具,并且可以图形化

8、  搜索引擎相关理论

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值