zoukankan      html  css  js  c++  java
  • ElasticSearch(ES)学习笔记

    1.概念

    ES即为了解决原生Lucene使用的不足,优化Lucene的调用方式,并实现了高可用的分布式集群的搜索方案,其第一个版本于20102月出现在GitHub上并迅速成为最受欢迎的项目之一。

    首先,ES的索引库管理支持依然是基于Apache Lucene(TM)的开源搜索引擎。

    ES也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

     

    ES的核心不在于Lucene,其特点更多的体现为:

     

    分布式的实时文件存储,每个字段都被索引并可被搜索

     

    分布式的实时分析搜索引擎

     

    可以扩展到上百台服务器,处理PB级结构化或非结构化数据

     

    高度集成化的服务,你的应用可以通过简单的 RESTful API、各种语言的客户端甚至命令行与之交互。

    2.es区别于lucene

     

    LuceneES联系,区别:项目中为啥使用ES而不用Lucene.

     

    联系:ElasticSearch封装了Lucene,让使用变得更简单,在高可用上面做得更好。

     

    区别:ElasticSearch除了拥有Lucene所有优点以外,还拥有自己优点.

     

         可用性:支持集群没有单点故障

     

         扩展性:支持集群扩展

     

         在集群环境使用:

     

    ElasticSearch

     

       搜索引擎服务器,所有项目都统一访问索引服务器,可以支持在集群环境使用.

     

    Lucene 搜索引擎工具包,必须集成到项目中使用,而在集群环境下,多个服务器都有自己Lucene文件,所以不统一. 不支持在集群环境使用

     

         支持多种语言:ElasticSearch支持很多语言,Lucene支持java

     

         简单性:ElasticSearch简单,都是http请求而Lucene复杂,都要调用API执行一大堆操作

     

    一般lucene在中小型项目中使用(但是也能使用es),ES在大型项目中使用.因为ES支持在集群环境使用,并且自身也支持集群.

     

    3.三大全文

    luncene/es/solr

     

    SolrES比较:

     

    Solr 利用 Zookeeper 进行分布式管理,支持更多格式的数据(HTML/PDF/CSV),官方提供的功能更多在传统的搜索应用中表现好于 ES,但实时搜索效率低。

     

     ES自身带有分布式协调管理功能,但仅支持json文件格式,本身更注重于核心功能,高级功能多有第三方插件提供,在处理实时搜索应用时效率明显高于 Solr

    4.es的安装

     

    官方下载地址:https://www.elastic.co/downloads/elasticsearch

    安装运行

    修改jvm.options

     

     

     

     运行

    访问测试

     ES集群已经启动并且正常运行.

     

    5.客户端

     

    客户端可以分为图形界面客户端,和代码客户端.

    辅助管理工具Kibana5

    Kibana5.2.2下载地址:https://www.elastic.co/downloads/kibana

    ② 解压并编辑config/kibana.yml,设置elasticsearch.url的值为已启动的ES

    ③ 启动Kibana5 : binkibana.bat

     

    ④ 默认访问地址:http://localhost:5601

    Discover:可视化查询分析器

    Visualize:统计分析图表

    Dashboard:自定义主面板(添加图表)

    TimelionTimelion是一个kibana时间序列展示组件(暂时不用)

    Dev Tools Console(同CURL/POSTER,操作ES代码工具,代码提示,很方便)

    Management:管理索引库(index)、已保存的搜索和可视化结果(save objects)、设置 kibana 服务器属性。

     

     启动运行访问

     

    6.es的数据管理

    --es的文档

    ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。

     

    _index:索引库,类似于关系型数据库里的“数据库”—它是我们存储和索引关联数据的地方。

    _type类型,似于关系型数据库中表.在应用中,我们使用对象表示一些“事物”,例如一个用户、一篇博客、一个评论,或者一封邮件。可以是大写或小写,不能包含下划线或逗号。我们将使用 employee 做为类型名。

    _id: _index  _type  组合时,就可以在ELasticsearch中唯一标识一个文档。当创建一个文档,你可以自定义 _id  ,也可以让Elasticsearch帮你自动生成。

    另外还包括:_uid文档唯一标识(_type#_id)

    _source:文档原始数据

    _all:所有字段的连接字符串

     

    --基本操作

    添加

    PUT dms/emp/1
    {
      "id":1,
      "name":"sss",
      "age":13
    }

    查询
    get dms/emp/_search

    自定义id

    POST dms/emp/
    {
      "id":2,
      "name":"sss2",
      "age":13
    }

    #2:修改:a:先删除再插入
    PUT crm/emp/1
    {
      "id":1,
      "name":"ads",
      "age":18
    }

    #2:修改:b:局部修改
    POST crm/emp/AWmjggiFZPiESvqs-mqR/_update
    {
      "doc": {
        "id":1,
      "name":"xxx",
      "age":17
      }

    }

    #3:删除:a:指定一个document删除
    DELETE dms/emp/1
    #3:删除:b:删除整个索引,删库
    DELETE dms

    # 4:查询:a:指定一个document的id查询
    GET dms/emp/1
    # 4:查询:b:指定一个document的id查询,只需要返回数据:source
    GET dms/emp/1/_source
    # 4:查询:c:指定一个document的id查询,只需要返回指定key的数据:只返回source的name的值
    GET dms/emp/1/_source?_source=name

     

    #5.1不同索引不同类型的数据

    GET _mget
    {
      "docs":[
        {
      "_index":"dms",
      "_type":"emp",
      "_id":"1"
    },{
      "_index":"dms",
      "_type":"emp",
      "_id":"2"
    }
        ]
    }
    #5.2:同一个索引和类型

    GET dms/emp/_mget
    {
      "ids":[1,2,3]
    }
    #6.1: 查询所有的索引数据
    GET _search
    #6.2:指定索引和分类的查询
    GET dms/emp/_search

    #size :每页多少条 默认是10;   from:从哪里开始,默认从0开始

    GET dms/emp/_search?size=2&from=1

    字符串查询

    GET dms/emp/_search?q=age:11
    es的查询:TO必须大写;多个条件使用&拼接;排序:默认是升序asc


    GET dms/emp/_search?q=age[10 TO 13]&sort=id:desc&size=2&from=0

    6.dsl查询与过滤

     -- 什么是DSL查询

    ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。

    DSL(Domain Specific Language特定领域语言)JSON请求体的形式出现

    查询字符串模式GET dms/emp/_search?q=name:文兵 简单查询

    DSL模式 复杂查询

    GET dms/emp/_search

    {

    "query" : {

       "match" : {

        "name" : "sss"

    }

    }

    }

     

     

     

    7.分词与映射

    1) 集成合适分词器-ik

            在服务端通过插件集成分词器

    2) 要设置字段的分词器

            通过客户端告诉es某个字段要使用某个分词

     

    ESIK分词器插件源码地址:https://github.com/medcl/elasticsearch-analysis-ik

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    IOCP十:Client退出后投递WSARecv
    IOCP九:Client退出后投递WSASend
    IOCP九:Client退出后投递WSASend
    CPU线程调度
    CPU线程调度
    windows的磁盘操作之八——格式化分区的思考
    windows的磁盘操作之八——格式化分区的思考
    windows的磁盘操作之六——获取系统所在物理磁盘号
    windows的磁盘操作之六——获取系统所在物理磁盘号
    windows的磁盘操作之七——获取当前所有的物理磁盘号
  • 原文地址:https://www.cnblogs.com/wgyi140724-/p/10577030.html
Copyright © 2011-2022 走看看