ElasticSearch入门

2021-06-28  本文已影响0人  东南枝下

简介

Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎,拥有强大的数据检索分析能力。
ES使用JSON作为文档的序列化格式。JSON 序列化为大多数编程语言所支持,并且已经成为 NoSQL 领域的标准格式。 它简单、简洁、易于阅读。
所以说ES数据中的“字段”更为灵活。同一索引->类型下的文件的json格式可以各不相同。

名词解释:索引、类型、文档

一个 Elasticsearch 集群可以 包含多个 索引 ,相应的每个索引可以包含多个 类型 。 这些不同的类型存储着多个 文档 ,每个文档又有 多个 属性 。

索引(名词):

如前所述,一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方。 索引 (index) 的复数词为 indicesindexes

索引(动词):

索引一个文档 就是存储一个文档到一个 索引 (名词)中以便被检索和查询。这非常类似于 SQL 语句中的 INSERT 关键词,除了文档已存在时,新文档会替换旧文档情况之外。

类型:

如果将索引理解为数据库,那么类型就可以理解为表。但这是一个不正确的对比,在7.x将类型过时移除了。
https://www.cnblogs.com/wangzhen3798/p/10765202.html

安装

docker 安装比较简单,所以采用docker安装。


docker pull elasticsearch:7.13.2

docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" elasticsearch:7.13.2

9300端口: ES节点之间通讯使用
9200端口: ES节点 和 外部 通讯使用
9300是tcp通讯端口,集群间和TCPClient都走的它;9200是http协议的RESTful接口
转载:https://blog.csdn.net/u013045102/article/details/85322862

图片.png

增删改查

增删改查通过9200端口restFul接口实现

如:查询所有
POST http://localhost:9200/_search
content-type →application/json; charset=UTF-8

图片.png

Java Client

es7.x 提供了两种
Java Low Level REST Client
Java High Level REST Client

这里使用Java High Level REST Client构建简单demo

pom.xml

 <!--es-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.13.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.13.2</version>
        </dependency>

EsTest.java

/**
 * @author Jenson
 */
public class EsTest {

    public static void main(String[] args) throws IOException {

        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));

        EsTest esTest = new EsTest();


        try {
            esTest.esBulkIndex(client);
            esTest.multiGet(client);
        } finally {
            client.close();
        }


    }

    public void esBulkIndex(RestHighLevelClient client) throws IOException {


        BulkRequest request = new BulkRequest();
        request.add(new IndexRequest("company_employee").id("1")
                .source(XContentType.JSON, "name", "huangshiren", "age", "15")
                .versionType(VersionType.EXTERNAL)
                .version(6)
        );
        request.add(new IndexRequest("company_employee").id("2")
                .source(XContentType.JSON, "name", "majiajue", "age", "14")
                .versionType(VersionType.EXTERNAL)
                .version(6)
        );
        request.add(new IndexRequest("company_employee").id("3")
                .source(XContentType.JSON, "name", "lvxiaodong", "age", "13")
                .versionType(VersionType.EXTERNAL)
                .version(6)
        );


        // 同步执行
        BulkResponse bulkResponse = client.bulk(request, RequestOptions.DEFAULT);


        for (BulkItemResponse bulkItemResponse : bulkResponse) {
            DocWriteResponse itemResponse = bulkItemResponse.getResponse();

            switch (bulkItemResponse.getOpType()) {
                case INDEX:
                case CREATE:
                    IndexResponse indexResponse = (IndexResponse) itemResponse;
                    System.out.println(indexResponse.toString());
                    break;
                case UPDATE:
                    UpdateResponse updateResponse = (UpdateResponse) itemResponse;
                    System.out.println(updateResponse.toString());
                    break;
                case DELETE:
                    DeleteResponse deleteResponse = (DeleteResponse) itemResponse;
                    System.out.println(deleteResponse.toString());
                default:
                    break;
            }
        }

    }

    public void multiGet(RestHighLevelClient client) throws IOException {


        MultiGetRequest request = new MultiGetRequest();

        request.add(
                new MultiGetRequest.Item("company_employee", "1")
        );

        MultiGetResponse response = client.mget(request, RequestOptions.DEFAULT);

        MultiGetItemResponse firstItem = response.getResponses()[0];

//      assertNull(firstItem.getFailure());
        GetResponse firstGet = firstItem.getResponse();
        String index = firstItem.getIndex();
        String id = firstItem.getId();
        if (firstGet.isExists()) {
            System.out.println("------------------------------");
            long version = firstGet.getVersion();
            System.out.println("version :" + version);
            String sourceAsString = firstGet.getSourceAsString();
            System.out.println("sourceAsString :" + sourceAsString);
            Map<String, Object> sourceAsMap = firstGet.getSourceAsMap();
            System.out.println("name :" + sourceAsMap.get("name"));
//          byte[] sourceAsBytes = firstGet.getSourceAsBytes();
        } else {
            System.out.println("找不到...............");
        }
    }

}

ES权威指南(中文、内容有过时):https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
ES指南(官方):https://www.elastic.co/guide/en/elasticsearch/reference/index.html

上一篇下一篇

猜你喜欢

热点阅读