ElasticSearch6.6.2详解JavaApi

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: ElasticSearch6.6.2详解JavaApi

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.6/java-rest-high.html

使用版本ElasticSearch6.6.2,jdk8

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.6.2</version>
</dependency>
package cn.elasticsearch662;
 
/** 
 * @author wangshiyu 
 * @Date 2019年7月24日 下午6:00:40 
 * 类说明 
 */
import org.apache.http.HttpHost;
import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
import org.elasticsearch.action.admin.indices.get.GetIndexResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.ScoreSortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Test;
 
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
 
public class EsTest {
 
    /**
     * 创建Index
     */
    @Test
    public void createIndex() throws Exception {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("39.96.53.204", 9200, "http")));// 初始化
        CreateIndexRequest request = new CreateIndexRequest("employee");// 创建索引
        // 创建的每个索引都可以有与之关联的特定设置。
        request.settings(Settings.builder().put("index.number_of_shards", 3)
                .put("index.number_of_replicas", 2));
        // 可选参数
        // request.timeout(TimeValue.timeValueMinutes(2));//超时,等待所有节点被确认(使用TimeValue方式)
        // request.timeout("2m");//超时,等待所有节点被确认(使用字符串方式)
        request.masterNodeTimeout(TimeValue.timeValueMinutes(1));// 连接master节点的超时时间(使用TimeValue方式)
        // request.masterNodeTimeout("1m");//连接master节点的超时时间(使用字符串方式)
        // request.waitForActiveShards(2);//在创建索引API返回响应之前等待的活动分片副本的数量,以int形式表示。
 
        CreateIndexResponse createIndexResponse = client.indices().create(
                request, RequestOptions.DEFAULT);
 
        client.close();
 
        System.out.println("isAcknowledged:"
                + createIndexResponse.isAcknowledged());
        System.out.println("isShardsAcknowledged:"
                + createIndexResponse.isShardsAcknowledged());
    }
 
    /**
     * 删除索引
     * 
     * @throws Exception
     */
    @Test
    public void deleteIndex() throws Exception {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("39.96.53.204", 9200, "http")));// 初始化
        DeleteIndexRequest request = new DeleteIndexRequest("books2");
        request.timeout(TimeValue.timeValueMinutes(2));
        // request.timeout("2m");
        request.masterNodeTimeout(TimeValue.timeValueMinutes(1));
        // request.masterNodeTimeout("1m");
        AcknowledgedResponse deleteIndexResponse = client.indices().delete(
                request, RequestOptions.DEFAULT);
        System.out.println("isAcknowledged:"
                + deleteIndexResponse.isAcknowledged());
        client.close();
    }
 
    /**
     * 检查索引是否存在
     * 
     * @throws Exception
     */
    @Test
    public void existIndex() throws Exception {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient
                        .builder(new HttpHost("192.168.199.213", 9200, "http")));// 初始化
        GetIndexRequest request = new GetIndexRequest();
        request.indices("goods");
        boolean exists = client.indices().exists(request,
                RequestOptions.DEFAULT);
        System.out.println("索引goods:" + exists);
        client.close();
    }
 
    /**
     * 获取索引
     * 
     * @throws Exception
     */
    @Test
    public void getIndex() throws Exception {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient
                        .builder(new HttpHost("192.168.199.213", 9200, "http")));// 初始化
        GetIndexRequest request = new GetIndexRequest().indices("shop");
        GetIndexResponse getIndexResponse = client.indices().get(request,
                RequestOptions.DEFAULT);
        System.out.println(Arrays.toString(getIndexResponse.getIndices()));
        client.close();
    }
 
    /**
     * 创建或者更新文档
     * 
     * @throws Exception
     */
    @Test
    public void insertDocument() throws Exception {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient
                        .builder(new HttpHost("192.168.199.213", 9200, "http")));// 初始化
 
        Map<String, Object> jsonMap = new HashMap<>();
        jsonMap.put("title", "完美的衣服");
        jsonMap.put("create_date", "2019-02-17");
        IndexRequest request = new IndexRequest("shop", "goods", "2")
                .source(jsonMap);
        IndexResponse indexResponse = client.index(request,
                RequestOptions.DEFAULT);
 
        System.out.println("id:" + indexResponse.getId());
 
        client.close();
    }
 
    /**
     * 获取文档
     * 
     * @throws Exception
     */
    @Test
    public void getDocument() throws Exception {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient
                        .builder(new HttpHost("192.168.199.213", 9200, "http")));// 初始化
        GetRequest request = new GetRequest("shop", "goods", "1");
        GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
 
        System.out.println("数据如下:" + getResponse.getSource().toString());
 
        client.close();
    }
 
    /**
     * 判断某一个文档是否存在
     * 
     * @throws Exception
     */
    @Test
    public void existDocument() throws Exception {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient
                        .builder(new HttpHost("192.168.199.213", 9200, "http")));// 初始化
        GetRequest request = new GetRequest("shop", "goods", "1");
        boolean exists = client.exists(request, RequestOptions.DEFAULT);
 
        System.out.println("是否存在:" + exists);
 
        client.close();
    }
 
    /**
     * 删除文档
     * 
     * @throws Exception
     */
    @Test
    public void deleteDocuemnt() throws Exception {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient
                        .builder(new HttpHost("192.168.199.213", 9200, "http")));// 初始化
        DeleteRequest request = new DeleteRequest("shop", "goods", "2");
        request.timeout(TimeValue.timeValueMinutes(2));
        // request.timeout("2m");
        DeleteResponse deleteResponse = client.delete(request,
                RequestOptions.DEFAULT);
 
        System.out.println(deleteResponse.getSeqNo());
        client.close();
    }
 
    /**
     * 更新文档
     * 
     * @throws Exception
     */
    @Test
    public void updateDocument() throws Exception {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient
                        .builder(new HttpHost("192.168.199.213", 9200, "http")));// 初始化
        Map<String, Object> jsonMap = new HashMap<>();
        jsonMap.put("title", "完美的衣服222");
        jsonMap.put("create_date", "2019-02-17");
        UpdateRequest request = new UpdateRequest("shop", "goods", "1")
                .doc(jsonMap);
        UpdateResponse updateResponse = client.update(request,
                RequestOptions.DEFAULT);
        System.out.println(updateResponse.getId());
        client.close();
    }
 
    /**
     * 条件搜索
     * 
     * @throws Exception
     */
    @Test
    public void searchDocument() throws Exception {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient
                        .builder(new HttpHost("192.168.199.213", 9200, "http")));// 初始化
        SearchRequest request = new SearchRequest();
        request.indices("shop");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(QueryBuilders.matchQuery("title", "鞋子"));
        // 排序start
        sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));
        sourceBuilder.sort(new FieldSortBuilder("_uid").order(SortOrder.ASC));
        // 排序end
        sourceBuilder.from(0);
        sourceBuilder.size(5);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        request.source(sourceBuilder);
 
        SearchResponse searchResponse = client.search(request,
                RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
 
        SearchHit[] searchHits = hits.getHits();
 
        System.out.println("SearchHit:" + searchHits.length);
 
        for (SearchHit hit : searchHits) {
            Map<String, Object> datas = hit.getSourceAsMap();
            System.out.println(datas.toString());
        }
 
        client.close();
    }
}
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
ElasticSearch聚合查询Restful语法和JavaApi详解(基于ES7.6)
在前面关于ES的一系列文章中,已经介绍了ES的概念、常用操作、JavaAPI以及实际的一个小demo,但是在真实的应用场景中,还有可能会有更高阶的一些用法,今天主要介绍两种相对来说会更难一些的操作,聚合查询。该文档基于ElasticSearch7.6,将介绍restful查询语法以及JavaApi。 阅读本文需要你有ElasticSearch的基础。
|
JSON Java API
通过官方文档高效学习ElasticSearch的JavaAPI实现!
有人说学习一项技术最好的资料是官方文档,对大部分技术来说确实是这样的。但是官方文档不一定适合每个人去看,比如一个初学者,直接让他看Spring的官方文档,其实是不合适的。今天我会结合ElasticSearch的一个客户端官方文档介绍ES在Java中的API应用。
|
1月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
41 5
|
2月前
|
存储 JSON Java
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
这篇文章是关于Elasticsearch的学习指南,包括了解Elasticsearch、版本对应、安装运行Elasticsearch和Kibana、安装head插件和elasticsearch-ik分词器的步骤。
208 0
elasticsearch学习一:了解 ES,版本之间的对应。安装elasticsearch,kibana,head插件、elasticsearch-ik分词器。
|
3月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
4月前
|
数据可视化 Docker 容器
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
这篇文章提供了通过Docker安装Elasticsearch和Kibana的详细过程和图解,包括下载镜像、创建和启动容器、处理可能遇到的启动失败情况(如权限不足和配置文件错误)、测试Elasticsearch和Kibana的连接,以及解决空间不足的问题。文章还特别指出了配置文件中空格的重要性以及环境变量中字母大小写的问题。
一文教会你如何通过Docker安装elasticsearch和kibana 【详细过程+图解】
|
4月前
|
JSON 自然语言处理 数据库
Elasticsearch从入门到项目部署 安装 分词器 索引库操作
这篇文章详细介绍了Elasticsearch的基本概念、倒排索引原理、安装部署、IK分词器的使用,以及如何在Elasticsearch中进行索引库的CRUD操作,旨在帮助读者从入门到项目部署全面掌握Elasticsearch的使用。
|
4月前
|
Ubuntu Oracle Java
如何在 Ubuntu VPS 上安装 Elasticsearch
如何在 Ubuntu VPS 上安装 Elasticsearch
49 0
|
4月前
|
存储 Ubuntu Oracle
在Ubuntu 14.04上安装和配置Elasticsearch的方法
在Ubuntu 14.04上安装和配置Elasticsearch的方法
47 0