• ELK(检索)


    一、全文检索

      lucene实现全文检索流程

    二、ELK日志协议栈

      ELK:是一套完整的解决方案

      1)elasticsearch:分布式搜索引擎的框架

      2)

    三、Elasticsearch介绍

      1、介绍

       简称ES,es是一个开源的高扩展的分布式全文检索引擎,专注于存储和检索数据,基于java语言编瞎写。

      2、特点

        1)仅支持json文件格式;

        2)Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;

        3)Elasticsearch 自身带有分布式协调管理功能;

    四、ES的基本概念

    Elasticsearch对比传统关系型数据库如下:

    Relational DB -> Databases -> Tables -> Rows -> Columns

    Elasticsearch -> Indices -> Types -> Documents -> Fields

    五、Elasticsearch核心概念

      1.索引 index

        一个索引就是一个拥有几分相似特征的文档的集合。相当于mysql中的database

      2.类型 type

        在一个索引中,你可以定义一种或多种类型。相当于mysql中table

      3.field

        相当于mysql中column。es数据的每一个字段。

      4.文档 document

        一个文档是一个可被索引的基础信息单元。就是一条数据。相当于mysql中的row

      5.映射 mapping

        针对每一个field的属性定义。是否存储。是否索引,是否分词。

      6.setting

        设置一个index库的分片数和副本数

      7.集群 cluster

        由每一个es节点组成的服务。

      8、节点 node

        一个es服务器就是一个节点。

      9.分片和复制

        shard:一个index索引库的分片

        replicas:副本

    六、使用javaAPI访问集群

    1、导入pom

    2、创建索引(prepareindex)

      2.1创建Client

    @Before
        public void init() throws UnknownHostException {
            Settings settings = Settings.builder().put("cluster.name", "myes").build();
            client = new PreBuiltTransportClient(settings);
    
            client.addTransportAddress(new TransportAddress(InetAddress.getByName("hadoop01"),9300))
                    .addTransportAddress(new TransportAddress(InetAddress.getByName("hadoop02"),9300))
                    .addTransportAddress(new TransportAddress(InetAddress.getByName("hadoop03"),9300));
    
        }

    2.2 第一种创建方式 自己凭借json创建然后保存到索引库下

    @Test
        public void createIndex1(){
            // json 创建
            String json = "{" +
                    ""user":"kimchy"," +
                    ""postDate":"2013-01-30"," +
                    ""message":"travelying out Elasticsearch"" +
                    "}";
            // 预插入   prepareIndex
            client.prepareIndex("索引名", "类型", "id")
                    .setSource(json, XContentType.JSON)
                    .get();
        }

    2.3 使用map创建索引

    @Test
    public void index2() throws Exception {
        // 定义map 
        HashMap<String, String> jsonMap = new HashMap<String, String>();
        // 添加数据
        jsonMap.put("name", "zhangsan");
        jsonMap.put("sex", "1");
        。。。。。
        
        client.prepareIndex("myindex1", "article", "2")
                .setSource(jsonMap)
                .get();
        client.close();
    }
    

    2.3XcontentBuilder实现创建索引

    @Test
    public void index3() throws IOException {
        client.prepareIndex("myindex1", "article", "3")
                .setSource(new XContentFactory().jsonBuilder()
                        .startObject()
                        .field("name", "lisi")
                        .field("age", "18")
                        .field("sex", "0")
                        .field("address", "bj")
                        .endObject())
                .get();
        client.close();
    
    }
    

    2.4 将对象转换为json格式字符串进行创建索引

    1、定义一个person对象
    2、插入数据
     */
    @Test
    public void objToIndex(){
        Person person = new Person();
    
        person.setAge(18);
        person.setId(20);
        person.setSex(1);
        。。。。。
        String json = JSONObject.toJSONString(person);
        client.prepareIndex("myindex1","article","32")
                .setSource(json,XContentType.JSON)
                 .get();
        client.close();
    }
    

    2.5 批量创建索引

    @Test
    public void index4() throws IOException {
    
        BulkRequestBuilder bulk = client.prepareBulk();
    
        bulk.add(client.prepareIndex("myindex1", "article", "4")
                .setSource(new XContentFactory().jsonBuilder()
                        .startObject()
                        .field("name", "wangwu")
                        .field("age", "18")
                        .field("sex", "0")
                        .field("address", "bj")
                        .endObject()));
        bulk.add(client.prepareIndex("news", "article", "5")
                .setSource(new XContentFactory().jsonBuilder()
                        .startObject()
                        .field("name", "zhaoliu")
                        .field("age", "18")
                        .field("sex", "0")
                     a   .field("address", "bj")
                        .endObject()));
        BulkResponse bulkResponse = bulk.get();
        client.close();
    }
    

    3、更新索引(prepareUpdate)

      根据系统给数据生成的id来进行更新索引

    @Test
    public void updateIndex(){
        Person guansheng = new Person(修改的数据);
    
        client.prepareUpdate()
                .setIndex("索引库名")
                .setType("类型")
                .setId("id")
                .setDoc(JSONObject.toJSONString(guansheng),XContentType.JSON)
                .get();
        client.close();
    }
    

    4、删除索引(prepareDelete)

     1、根据id来删除

    @Test
    public void deleteById(){
        client.prepareDelete("索引库名", "类型", "id").get();
        client.close();
    }
    

    2、删除整个索引库

    client.admin()
            .indices()
            .prepareDelete("索引库名")
            .execute()
            .actionGet();
    client.close();
    
  • 相关阅读:
    Delphi 拖动
    Unknown picture file extension
    鼠标指针形状
    C_FD_PhysRDBMSKinds
    delphichromiumembedded
    delphi使用 DockForm DesignEditors F2613 Unit 'DockForm' not found
    TBitConverter
    sql 存储过程返回值 变量名
    XE7 数据库独立运行需要的文件
    C++Builder 内存泄露检测
  • 原文地址:https://www.cnblogs.com/haojia/p/12386208.html
Copyright © 2020-2023  润新知