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();

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值