美文网首页
ElasticSearch入门

ElasticSearch入门

作者: 东南枝下 | 来源:发表于2021-06-28 16:36 被阅读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

    相关文章

      网友评论

          本文标题:ElasticSearch入门

          本文链接:https://www.haomeiwen.com/subject/byiqultx.html