栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ElasticSearch入门篇(3):Java API开发

ElasticSearch入门篇(3):Java API开发

  此文是ElasticSearch入门的第三篇,主要介绍下ES的Java API开发。

1. 环境准备

JDK :1.8
ES :7.15.2(es的客户端版本要和本地部署的服务端版本保持一致
IDEA:2020.1
  新建一个maven项目,导入如下的pom文件

 
        
        	
            org.elasticsearch.client
            transport
            7.15.2
        
        
            org.elasticsearch.client
            elasticsearch-rest-high-level-client
            7.15.2
        
        
            org.elasticsearch.client
            elasticsearch-rest-client
            7.15.2
        
        
            org.apache.logging.log4j
            log4j-core
            2.9.1
        
        
            junit
            junit
            4.12
            test
        
        
            org.testng
            testng
            6.14.3
            test
        
        
        
        
            com.alibaba
            fastjson
            1.2.47
        
        
            org.junit.jupiter
            junit-jupiter
            RELEASE
            compile
        
        
            org.junit.jupiter
            junit-jupiter
            RELEASE
            compile
        
    
2. 代码 2.1 创建客户端连接

  创建es的客户端有两种方式,一种是通过TransportClient方式,使用内部通信端口;另一种是通过RestHighLevelClient方式,使用http端口,是目前ES官方主推的模式。
因为笔者是学习状态,本文主要还是通过TransportClient方式,两种方式可以转换

private TransportClient transportClient;
    private RestHighLevelClient restHighLevelClient;

    
    @BeforeEach
    public void createClinet() throws UnknownHostException {
        
        Settings settings = Settings.builder()
                .put("cluster.name", "zero")
                .put("client.transport.sniff", "false")//本地测试要设置成false
                .build();
        transportClient = new PreBuiltTransportClient(settings)
                .addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"),9300))//内部通信端口
                .addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"),9301))//内部通信端口
                .addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"),9302));//内部通信端口
        System.out.println("TransportClient 连接成功");

        
        restHighLevelClient = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http"),//http的通信端口
                        new HttpHost("localhost", 8200, "http"),//http的通信端口
                        new HttpHost("localhost",8000,"http")));//http的通信端口
        System.out.println("RestHighLevelClient 连接成功");
    }

2.2 关闭客户端连接
 
    @AfterEach
    public  void closeClinet(){
        try {
            transportClient.close();
            System.out.println("TransportClient 连接关闭成功");
            restHighLevelClient.close();
            System.out.println("RestHighLevelClient 连接关闭成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
2.3 实际操作
    @Test
    public void createIndex_1() {
        //
        transportClient.admin().indices().prepareCreate("mytest_index_1").get();
        System.out.println("创建Index成功");

        IndexRequest indexRequest = new IndexRequest("mytest_index_1");
        indexRequest.type("_doc");
        indexRequest.id("1");
        indexRequest.source("{" + ""name": "商品2","
                + ""price": "10"," + ""number": "10"" + "}", XContentType.JSON);
        try {
            restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    
    @Test
    public void createIndex_2() throws Exception {
        HashMap jsonMap = new HashMap();
        jsonMap.put("name", "zero");
        jsonMap.put("sex", "1");
        jsonMap.put("age", "25");
        jsonMap.put("address", "hf");
        IndexResponse indexResponse = transportClient.prepareIndex("mytest_index_2", "doc", "2")
                .setSource(jsonMap)
                .get();
        System.out.println("创建Index成功");
    }

    
    @Test
    public void deleteIndex(){
        transportClient.admin().indices().prepareDelete("mytest_index_2").get();
        System.out.println("删除索引成功");
    }


    
    @Test
    public void getSearch(){
        GetResponse documentField = transportClient.prepareGet("employee","_doc","1").get();
        //直接输出string类型的结果字符串
        System.out.println(documentField.getSourceAsString());
        //输出index、type、id等内部属性字段值
        String index = documentField.getIndex();
        String type_ = documentField.getType();
        String id = documentField.getId();
        System.out.println("index: "+index+", type: "+type_+", id: "+id);
        //输出自定的字段的结果
        Map source = documentField.getSource();
        for(String field:source.keySet()){
            System.out.println(field +" : "+source.get(field));
        }
        //输出某个自定义字段的值
        String name = (String) documentField.getSource().get("name");
        System.out.println(name);
    }

    
    @Test
    public void searchAllData(){
        SearchResponse searchResponse = transportClient.prepareSearch("employee")
//                .setTypes("_doc")
                .setQuery(new MatchAllQueryBuilder())
                .get();
        SearchHits searchHits = searchResponse.getHits();
        SearchHit[] hits = searchHits.getHits();
        for(SearchHit hit:hits){
            String sourceString = hit.getSourceAsString();
            System.out.println(sourceString);
        };
    }

    
    @Test
    public void  rangeQuery(){
        SearchResponse searchResponse = transportClient.prepareSearch("employee")
                .setQuery(new RangeQueryBuilder("sal").gte(10000).lte(20000))
                .get();
        SearchHits hits = searchResponse.getHits();
        SearchHit[] hits1 = hits.getHits();
        for (SearchHit documentFields : hits1) {
            System.out.println(documentFields.getSourceAsString());
        }
    }

    
    @Test
    public  void termQuery(){
        String[] include_source = {"name","age","job"};
        String[] exclude_a = null;
        String[] exclude_b = {"age"};
        SearchResponse searchResponse = transportClient.prepareSearch("employee")
                .setQuery(new TermQueryBuilder("job", "java"))
//                .setFetchSource(include_source,exclude_a)//设置只返回指定的字段或者不回哪些字段,
                .setFetchSource(include_source,exclude_b) //设置不返回age
                .get();
        SearchHits hits = searchResponse.getHits();
        SearchHit[] hits1 = hits.getHits();
        for (SearchHit documentFields : hits1) {
            System.out.println(documentFields.getSourceAsString());
        }
    }

    
    @Test
    public void fuzzy_search(){
        SearchResponse searchResponse = transportClient.prepareSearch("employee")
                .setQuery(new FuzzyQueryBuilder("job","jaVA").fuzziness(Fuzziness.TWO))
                .get();
        SearchHits searchHit = searchResponse.getHits();
        SearchHit[] hits = searchHit.getHits();
        for (SearchHit hit:hits) {
            System.out.println(hit.getSourceAsString());
        }
    }

    
    @Test
    public void boolQuery(){
        int pageSize = 3;
        int pageNum = 2;
        int startNum = (pageNum-1)*pageSize;
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("job","html");
        RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("sal").gt("10000").lt("25000");
        FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("gender","fe").fuzziness(Fuzziness.ONE);
        SearchResponse searchResponse = transportClient.prepareSearch("employee")
                .setQuery(QueryBuilders.boolQuery().must(termQueryBuilder)
                .should(QueryBuilders.boolQuery().must(rangeQueryBuilder).must(fuzzyQueryBuilder)))
                .addSort("id",SortOrder.ASC)
                .setFrom(startNum)
                .setSize(pageSize)
                .get();
        SearchHits searchHit = searchResponse.getHits();
        SearchHit[] hits = searchHit.getHits();
        for (SearchHit hit:hits) {
            System.out.println(hit.getSourceAsString());
        }
    }

    
    @Test
    public void pageQuery(){
        int pageSize = 5;
        int pageNum = 1;
        int startNum = (pageNum-1)*pageSize;
        SearchResponse searchResponse = transportClient.prepareSearch("employee")
                .setQuery(QueryBuilders.matchAllQuery())
                .addSort("id", SortOrder.ASC)
                .setSize(pageSize)
                .setFrom(startNum)
                .get();
        SearchHits searchHits = searchResponse.getHits();
        SearchHit[] hits = searchHits.getHits();
        for(SearchHit searchHit:hits){
            System.out.println(searchHit.getSourceAsString());
        }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604881.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号