ES基础概念

1.倒排索引

倒排索引源于实际应用中需要根据属性的值来查找记录。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因此称为倒排索引。

倒排索引里有三个文件,索引词文件,词频文件,位置文件。

2.索引词

索引词是一个能够被索引的精确词。

3.文本

文本是一段普通的非结构化文字。

3.分析

分析是将文本转换为索引词的过程,分析的结果依赖于分词器。

4.集群

集群由一个或多个节点组成,对外提供服务,对外提供索引和搜索功能。在所有的节点,一个集群有一个唯一的名称默认为“ElasticSearch”,此名称很重要,因为每个节点只能是集群的一部分,当该节点被设置为相同的集群名称时,就会自动加入集群。当需要多个集群的时候,要确保每个集群的名称不能重复,否则,节点可能会加入错误的集群。

5.节点

一个节点是一个逻辑上独立的服务,它是集群的一部分,可以存储数据,并参与集群的索引和搜索功能。就像集群一样,节点也有唯一的名字,在启动时分配。一个节点只能加入一个集群。

6.路由

当存储一个文档的时候,它会存储在唯一的主分片中,具体哪个分片是通过散列值进行选择。

7.分片

分片是单个Lucene实例。分片有主分片和副分片。

8.索引

索引是具有相同结构的文档集合。相当于数据库的Datebase

9.类型

在索引中,可以定义一个或多个类型,类型是索引的逻辑分区。相当于数据库中的表。

10.文档

文档是存储在Elasticsearch中的一个JSON字符串,相当于数据库中表的一行。

11.映射

映射想关系数据库中的表结构,每一个索引都有一个映射。

12.字段

类似关系数据库的某一列,这是ES数据存储的最小单位。

13.主键ID

ID是一个未接的唯一标识,如果在库中没有提供ID,系统会自动生成一个ID。

14.Rest请求头

Http   数据处理

post   create

get     read

put     update

delete delete

15.文档的增删改查

put/post/get/delete http://ip:端口/索引名称/类型/主键

参数

16.文档的增删改查

package com.czy.demo;

import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.bulk.byscroll.BulkByScrollResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.reindex.DeleteByQueryAction;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Date;

import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;

/**
 * 索引的增删改查
 * Created by chenzhiyuan on 2017/8/29.
 */
public class OperationIndexDemo {
    private TransportClient client;

    @Before
    public void before() throws UnknownHostException {
        Settings settings = Settings.builder()
                .put("cluster.name", "elasticsearch")
                .put("client.transport.sniff", true)
                .build();
        client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
    }

    /**
     * 创建索引的第一步是把对象转换成字符串
     * 官方给出了四种创建JSON字符串的方法
     * 1.手写方式
     * 2.使用集合
     * 3.使用JACKSON序列化
     * 4.使用Elasticsearch帮助类,官方推荐
     * 可以调用response对象的方法获取返回信息:
     * // 索引名称
     * String _index = response.getIndex();
     * // 类型名称
     * String _type = response.getType();
     * // 文档id
     * String _id = response.getId();
     * // 版本(if it's the first time you index this document, you will get: 1)
     * long _version = response.getVersion();
     * // 是否被创建is true if the document is a new one, false if it has been updated
     * boolean created = response.isCreated();
     */
    @Test
    public void createIndex() throws IOException {
        IndexResponse response = client.prepareIndex("twitter", "tweet", "1")
                .setSource(jsonBuilder()
                        .startObject()
                        .field("user", "kimchy")
                        .field("postDate", new Date())
                        .field("message", "trying out Elasticsearch")
                        .endObject()
                )
                .get();
        //可以调用response对象的方法获取返回信息:
        // 索引名称
        String _index = response.getIndex();
        // 类型名称
        String _type = response.getType();
        // 文档id
        String _id = response.getId();
        // 版本(if it's the first time you index this document, you will get: 1)
        long _version = response.getVersion();
        // status has stored current instance statement.
        RestStatus status = response.status();
        System.out.println("index:" + _index + " type:" + _type + " id:" + _id + " version:" + _version);
        System.out.println("status:" + status);

    }

    @Test
    public  void getIndex() throws  Exception{
        GetResponse response = client.prepareGet("twitter","tweet","1")
                .setOperationThreaded(false)
                .get();
        System.out.println(response.getSource());
    }

    @Test
    public void deleteIndex() throws  Exception{
        DeleteResponse response = client.prepareDelete("twitter","tweet","1")
                .get();
        System.out.println(response.getResult());
    }

    @Test
    public  void updateIndex() throws  Exception{
        //注意更新不存在的索引会报错
        UpdateRequest updateRequest = new UpdateRequest();
        updateRequest.index("twitter");
        updateRequest.type("tweet");
        updateRequest.id("1");
        updateRequest.doc(jsonBuilder().startObject().field("user","cxy").endObject());
        UpdateResponse response = client.update(updateRequest).get();
        System.out.println(response.getResult());
    }

    @Test
    public  void upsertIndex() throws  Exception{
        IndexRequest indexRequest = new IndexRequest("twitter","tweet","2")
                .source(jsonBuilder().startObject()
                .field("user", "cxy")
                .field("postDate", new Date())
                .field("message", "trying")
                .endObject());
        UpdateRequest updateRequest = new UpdateRequest("twitter","tweet","2")
                .doc(jsonBuilder().startObject()
                .field("user","cxy")
                .endObject())
                .upsert(indexRequest);
       UpdateResponse response= client.update(updateRequest).get();
        System.out.println(response.getResult());
    }

    @Test
    public  void multiGetIndex() throws Exception{
        MultiGetResponse multiGetItemResponses = client.prepareMultiGet()
                .add("twitter","tweet","1")
                .add("twitter","tweet","2","3")
                .add("another","type","foo")
                .get();
        for (MultiGetItemResponse itemResponse :multiGetItemResponses){
            GetResponse response = itemResponse.getResponse();
            if(response!=null &&response.isExists()){
                System.out.println(response.getSourceAsString());
            }
        }
    }

    @Test
    public void deleteByQuery() throws  Exception{
        BulkByScrollResponse response = DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
                .filter(QueryBuilders.matchQuery("user","czy"))
                .source("twitter")
                .get();
        long deleteNumber = response.getDeleted();
        System.out.println(deleteNumber);
    }

    @Test
    public void deleteByQueryAsynchronously() throws  Exception{
        DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
                .filter(QueryBuilders.matchQuery("user","cxy"))
                .source("twitter")
                .execute(new ActionListener<BulkByScrollResponse>() {
                    @Override
                    public void onResponse(BulkByScrollResponse bulkByScrollResponse) {
                        System.out.println(bulkByScrollResponse.getDeleted());
                    }

                    @Override
                    public void onFailure(Exception e) {
                        System.out.println(e.getMessage());
                    }
                });
    }

    @Test
    public  void bulkIndex() throws Exception{
        BulkRequestBuilder bulkRequest = client.prepareBulk();
        bulkRequest.add(client.prepareIndex("twitter","tweet","4")
                        .setSource(jsonBuilder().startObject()
                        .field("user","czy")
                        .field("postDate",new Date())
                        .field("message","happy ending")
                        .endObject()
                        )
        );
        bulkRequest.add(client.prepareIndex("twitter","tweet","4")
                .setSource(jsonBuilder().startObject()
                        .field("user","cxy")
                        .field("postDate",new Date())
                        .field("message","happy ending")
                        .endObject()
                )
        );
        BulkResponse bulkResponse= bulkRequest.get();
        System.out.println(bulkResponse.getTook());
        if (bulkResponse.hasFailures()) {
            System.out.println(bulkResponse.getTook());
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
头哥(Hutool)是一个Java工具包,它包含了一系列方便开发者使用的工具类,但"头哥第1关:Elasticsearch基本概念"这个表述可能并不准确。Elasticsearch是一个开源的分布式搜索引擎,它主要用于全文搜索和分析。如果你是指Hutool教程或某个特定的入门任务中关于Elasticsearch的内容,我可以为你概述几个基本概念: 1. **文档**(Document): 在Elasticsearch中,数据的基本单元是文档,它类似于关系数据库中的行。每个文档都有一个唯一的ID,并存储在一个索引(Index)里。 2. **索引**(Index): 是Elasticsearch中用于存储文档的容器,类似数据库表。你可以根据需要创建多个索引,每个索引可以包含相关的文档。 3. **字段**(Field): 文档中的每个属性都是一个字段,可以设置为各种数据类型,如字符串、数字、日期等。字段还可以进行分析处理,以便于搜索。 4. **查询**(Query): 用户通过查询来检索数据,Elasticsearch支持多种查询类型,如简单匹配、复杂查询(如布尔查询、范围查询)和聚合查询。 5. **索引操作**:常见的操作包括创建索引、添加文档(index)、更新文档(update)和删除文档(delete)。 6. **分片和复制**(Sharding and Replication): Elasticsearch将索引分成多个小的、独立的部分(分片),并可以在多个节点上复制这些分片,以提高数据的可用性和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值