elasticsearch-6.4.3 java代码操作ES

版权声明:杨杨杨~~的版权 https://blog.csdn.net/weixin_38316697/article/details/84258172

elasticsearch-6.4.3 java代码操作ES

     这次我讲的是6.4.3版本的elasticsearch相关java代码,其余版本的elasticsearch用这套代码不一定会好使,所以说看的时候请注意你的elasticsearch版本号和我的版本号是否相同,如果不同的话,估计这套代码对你基本没啥作用。

    在贴代码之前先说下elasticsearch几个关键的属性由那些

  1.  近实时查询
  2. 节点和集群
  3. 文档
  4. 索引
  5. 类型
  6. 分片和复制

具体的概念和elasticsearch的安装配置就不说了,百度一搜一大把,我就直接上代码了。

   /**
     * 初始化客户端连接
     */

private static TransportClient client;
   
 public Client initESClient() {
        // 配置你的es,如果你的集群名称不是默认的elasticsearch,需要以下这步
        Settings settings = Settings.builder().put("cluster.name","elasticsearch")
                .put("client.transport.ignore_cluster_name", true)
                .build();
        // 这里可以同时连接集群的服务器,可以多个,并且连接服务是可访问的
        try {
            // 创建client
            client = new PreBuiltTransportClient(settings)

                    .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.112"), 9300))
            ;
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }finally
        {
            if(client != null)
            {
                System.out.println("连接成功!");
            }
        }
        return client;
    }

     /**
     * 关闭客户端连接
     */     

    public void closeESClient() {
        client.close();
        System.out.println("连接关闭!");
    }

    /**
     * 创建索引
     */

    @SuppressWarnings("unused")
    private void createIndex() {
        try {
            //创建映射
             //title:字段名,  type:文本类型       analyzer :分词器类型
            XContentBuilder mapping = jsonBuilder()
                    .startObject()
                    .startObject("properties")
                    .startObject("title").field("type", "text").field("analyzer", "ik_smart").endObject()   //该字段添加的内容,查询时将会使用ik_smart分词
                    .startObject("content").field("type", "text").field("analyzer", "ik_max_word").endObject()
                    .endObject()
                    .endObject();
            //index:索引名   type:类型名(可以自己定义)
            PutMappingRequest putmap = Requests.putMappingRequest("yzy").type("type").source(mapping);
            //创建索引
            client.admin().indices().prepareCreate("yzy").execute().actionGet();
            //为索引添加映射
            client.admin().indices().putMapping(putmap).actionGet();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 添加数据
     * **/

    public void addIndex()throws IOException{
               try{
                   //prepareIndex(索引,文本类型,ID)
                   IndexResponse response = client.prepareIndex("yzy", "type", "1")
                           .setSource(jsonBuilder()
                                   .startObject()
                                   .field("title", "标题")   //字段,值
                                   .field("content", "内容")
                                   .endObject()
                           ).get();

               }catch (Exception e){
                   e.printStackTrace();
               }
    }

    /**
     * 更新索引
     * **/

    public void updateByClient() throws IOException, ExecutionException, InterruptedException {
        //每次添加id应该不同,相当于数据表中的主键,相同 的话将会进行覆盖
        UpdateResponse response = client.update(new UpdateRequest("yzy", "type", "1")
                .doc(XContentFactory.jsonBuilder()
                        .startObject()
                        .field("title", "标题1")
                        .field("content","Hello world!!!")
                        .endObject()
                )).get();
    }

    /**
     * 获取指定文档
     * index 索引
     * type  类型
     * idtype   id
     */


    public Map<String,Object> get(String index,String type,String idtype){
        GetResponse response = client.prepareGet(index, type,idtype).get();
        Map<String, Object> source = response.getSource();
        Set<String> strings = source.keySet();
        Iterator<String> iterator = strings.iterator();
        while (iterator.hasNext()) {
            System.out.println(source.get(iterator.next()));
        }
       return source;

    }

 /**
     * 搜索索引            例子
     * index索引          school_index
     * type 类型          doc
     * query 属性         address
     * cxz   查询值       西城
     */

    public List<Map<String,Object>> search(String index,String type,String query,String cxz){
        final  List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        SearchResponse sr = client.prepareSearch()  //指定多个索引
                .setTypes(index, type)  //指定类型
                .setSearchType(SearchType.QUERY_THEN_FETCH)
                .setQuery(QueryBuilders.matchQuery(query, cxz))  // Query
                .setFrom(0).setSize(60).setExplain(true)
                .get();
        long totalHits1= sr.getHits().totalHits;  //命中个数
        for (SearchHit searchHit : sr.getHits().getHits()) {
            final Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
            list.add(sourceAsMap);
        }
        System.out.println(totalHits1+"---"+sr.toString());
        return list;
    }

    /**
     * 删除
     */

扫描二维码关注公众号,回复: 4271589 查看本文章
    public void delete(){
        //DeleteResponse response = client.prepareDelete("customertest", "joey", "1").get();  //删除文档
        //删除索引
        DeleteIndexResponse deleteIndexResponse = client.admin().indices()
                .prepareDelete("yzy")
                .execute().actionGet();
        boolean isFound = deleteIndexResponse.isAcknowledged();
        System.out.println(isFound);//返回文档是否存在,存在删除
    }

    /**
     * 批量新增
     */

    public void bulkdoc() throws IOException
    {
        BulkRequestBuilder bulkRequest = client.prepareBulk();
        bulkRequest.add(client.prepareIndex("twitter", "tweet", "1")
                .setSource(jsonBuilder()
                        .startObject()
                        .field("user", "kimchy")
                        .field("postDate", new Date())
                        .field("message", "trying out Elasticsearch")
                        .endObject()
                )
        );

        bulkRequest.add(client.prepareIndex("twitter", "tweet", "2")
                .setSource(jsonBuilder()
                        .startObject()
                        .field("user", "kimchy")
                        .field("postDate", new Date())
                        .field("message", "another post")
                        .endObject()
                )
        );

        BulkResponse bulkResponse = bulkRequest.get();
        if (bulkResponse.hasFailures()) {
            // process failures by iterating through each bulk response item
        }

    }

 /**
     * 全文查询(根据属性值查询)
     * query  属性名
     * msg   查询值
     * **/

 public List<Map<String,Object>> searchZd(String query,String msg){
        Map<String, Object> template_params = new HashMap<String, Object>();
        template_params.put("param_gender", msg);
        template_params.put("param_query", query);
        final  List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        //模板查询
        SearchResponse sr = new SearchTemplateRequestBuilder(client)
                .setScript("{\n" +
                        "        \"query\" : {\n" +
                        "            \"match\" : {\n" +
                        "                \"{{param_query}}\" : \"{{param_gender}}\"\n" +
                        "            }\n" +
                        "        }\n" +
                        "}")
                .setScriptType(ScriptType.INLINE)
                .setScriptParams(template_params)
                .setRequest(new SearchRequest())
                .get()
                .getResponse();
        long totalHits1= sr.getHits().totalHits;  //命中个数
        for (SearchHit searchHit : sr.getHits().getHits()) {
            final Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
            list.add(sourceAsMap);
        }
        System.out.println(totalHits1+"---"+sr.toString());
        return list;
    }

   /**
     * 全文查询
     * msg   查询值
     * **/

public List<Map<String,Object>> searchEs(String msg){
        Map<String, Object> template_params = new HashMap<String, Object>();
        template_params.put("param_gender", msg);
        final  List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        //模板查询
        SearchResponse sr = new SearchTemplateRequestBuilder(client)
                .setScript("{\n" +
                        "        \"query\" : {\n" +
                        "            \"query_string\" : {\n" +
                        "                \"query\" : \"{{param_gender}}\"\n" +
                        "            }\n" +
                        "        }\n" +
                        "}")
                .setScriptType(ScriptType.INLINE)
                .setScriptParams(template_params)
                .setRequest(new SearchRequest())
                .get()
                .getResponse();
        long totalHits1= sr.getHits().totalHits;  //命中个数
        for (SearchHit searchHit : sr.getHits().getHits()) {
            final Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
            list.add(sourceAsMap);
        }
        System.out.println(totalHits1+"---"+sr.toString());
        return list;
    }

猜你喜欢

转载自blog.csdn.net/weixin_38316697/article/details/84258172