Java学习笔记____ElasticSearch入门

目录

## ElasticSearch基础

## 其他组件

## ES入门


     拓展:
           1.ECMAScript:前端java语法规范协议
           2.搜索方向----搜索工程师
           3.RESTful:表述性状态转移,较好地控制状态资源转换

## ElasticSearch基础:


    java开发,底层为lucene的开源高扩展分布式全文搜索引擎,能够近乎实时地存储、检索数据,可处理PB级别的数据量

     区别:
           
Solr:
                1.Solr利用Zookeeper进行分布式管理
                2.Solr支持更多格式数据
                3.Solr官方提供的功能很多
                4.适用于传统搜索应用
          ES:
                1.ES自带分布式协调管理功能,更方便
                2.ES仅支持json格式
                3.ES更注重核心功能,高级功能由第三方提供
                4.适用于实时搜索应用

    对比:关系型数据库
          Databases     ----->     Index               索引库
          Table              ----->     Type               类型(区分数据种类)
          Row               ----->     Document       文档{key1:value1,key2:value2...}
          Column          ----->     Field               文档key值
          Schema         ----->     Mapping         映射

    ES安装注意
          1.跨域请求:修改配置文件config/elasticSearch.yml
                http.cors.enabled: true
                http.cors.allow-origin: "*"
                network.host: 127.0.0.1
            [注意]:
                由于是yml文件,故在:后面留意空格
          2.内存容量:修改配置文件config/jvm.options
                -Xms2g
                -Xmx2g
          3.最好JDK1.8及以上
          4.若使用的插件发生变动或更换,应当及时清理对应data目录下的分词数据,否则报错

    默认端口
          9300:       为后端Java开发暴露的端口,方便开发调用
          9200:       为浏览器访问暴露的端口,方便可视化访问

    分词器设置:IK
          第三方分词器插件需放置在plugins目录下,文件夹名无所谓,最好见名知意后期方便维护
          [注意]:
               本地添加插件后,开发时需要特别配置mappings声明使用此分词器,之后才生效(后续进阶篇介绍)

    其他相关概念:(后续进阶篇介绍)
          1.Near RealTime
          2.Cluster
          3.Node
          4.分片与复制shards&replicas

## 其他组件:

 

   由于ES不同于Solr官方提供了可视化界面,需要自己安装其他插件进行索引库可视化处理,方便后期观察与操作

    图形化界面插件:head-master(BS项目)
         使用js开发的服务工具,需要Node.js组件支持
         安装:直接解压即可
    安装Node.js组件
         支持Javascript在服务器端运行的平台,需要Grunt组件支持
         启动:grunt server
         端口:9100
    安装Grunt组件
         启动js项目的项目构建工具
         安装:npm install -g grunt -cli
         [注意]:
              若安装较为缓慢可以提前使用npm指令安装cnpm组件,然后使用相应cnpm指令从国内服务器上下载资源
    上述组件全部安装完毕后本地访问localhost:9100查看是否显示图形界面

## ES入门:


   导入依赖
       elasticSearch、transport

    查询方法:QueryBuilders对象
         所有查询:                           .matchAllQuery()
         字符串查询:                     .queryStringQuery(...)
         词条查询:                           .termQuery(key, value)
         模糊查询:                        .wildcardQuery(key,value)
    [注意]:
         模糊查询通常按分词结果结合通配符进行查询,故分词器的不同也会对查询造成影响

     索引库操作:添加一条记录
         1.创建客户端连接PreBuiltTransportClient对象
              [注意]:
                   由于默认存在集群,若不使用则需要添加参数Settings.EMPTY
         2.与ES服务建立连接,获取TransportClient对象
              .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(#IP), #port));
         3.使用XContentFactory对象组装文档信息(json格式)
              XContentFactory.jsonBuilder().startObject().field(key,value).[field(key2,value2)...]endObject();
         4.使用连接对象创建索引库,并添加文档信息
              .prepareIndex(#index, #type, #id).setSource(#XContentFactory).get();
              [注意]:
                  1.此处创建索引库时指定的id为此类型索引库对应的一条索引记录id,不可重复,否则将造成数据覆盖现象,
                     概念上此处id相当于关系型数据库主键,type为索引库索引记录分类依据,相当于关系型数据库中表级别
                  2.根据源码可知结尾处调用的.get()方法实际上是执行操作的方法,内含.execute()
         5.关闭资源

    // 创建客户端对象
    PreBuiltTransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY);
    // 准备连接对象
    TransportClient client = transportClient.addTransportAddress(
                new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
    // 构建文档信息 {id:"1", title:"aaa", content:"bbb"}
    XContentBuilder jsonBuilder = XContentFactory.jsonBuilder();
    jsonBuilder
        .startObject()
            .field("id","1")
            .field("title","aaa")
            .field("content","bbb")
        .endObject();
    // 创建索引库,并添加文档信息
    client.prepareIndex("blog1","article","1").setSource(jsonBuilder).get();
    // 关闭资源
    client.close();

    查询操作:查询所有
        1.创建客户端连接对象
        2.与ES服务建立连接
        3.调用方法组装目标索引库信息,创建SearchRequestBuilder查询对象
            .prepareSearch(index).setTypes(type).setQuery(QueryBuilders.matchAllQuery());
        4.获取响应结果SearchResponse对象
            .get()
        5.获取命中结果,并进行处理
            .getHits()
        6.关闭资源
        [注意]:
            由于1-2步基本所有ES操作都要使用,可以直接抽取成工具类,之后获取连接对象使用即可

    // 获取ES的连接对象
    TransportClient client = ESUtil.createTransportClient();
    // 执行查询
    SearchRequestBuilder searchRequest = client.prepareSearch("blog1").setTypes("article")
                                             .setQuery(QueryBuilders.matchAllQuery());
    // 获取响应结果
    SearchResponse searchResponse = searchRequest.get()
    // 获取命中结果,处理
    SearchHits searchHits = searchResponse.getHits();
    System.out.println("命中"+searchHits.getTotalHits()+"条");

    Iterator<SearchHit> iterator = searchHits.iterator();
    while(iterator.hasNext()){
        SearchHit searchHit = iterator.next();
        System.out.println(searchHit.getSourceAsString());
    }
    // 关闭资源
    client.close();

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值