• Java之Elasticsearch 增删改查


    <!--ELK  -->
    <dependency>
       <groupId>org.elasticsearch.client</groupId>
       <artifactId>transport</artifactId>
       <version>5.1.1</version>
       <exclusions>
          <!--<exclusion>
             <artifactId>transport-netty4-client</artifactId>
             <groupId>org.elasticsearch.plugin</groupId>
          </exclusion>-->
       </exclusions>
    </dependency>
    <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-core</artifactId>
       <version>2.6.2</version>
    </dependency>
    
    <!-- springmvc json -->
    <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
       <version>2.8.8</version>
    </dependency>
    <dependency>
       <groupId>org.codehaus.jackson</groupId>
       <artifactId>jackson-mapper-asl</artifactId>
       <version>1.9.13</version>
    </dependency>
    <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-core</artifactId>
       <version>2.8.8</version>
    </dependency>
    <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-annotations</artifactId>
       <version>2.8.5</version>
    </dependency>

    
    
    
    
    package com.sxis.util;
    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.concurrent.ExecutionException;
    
    import org.elasticsearch.ElasticsearchException;
    import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse;
    import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
    import org.elasticsearch.action.delete.DeleteResponse;
    import org.elasticsearch.action.get.GetResponse;
    import org.elasticsearch.action.index.IndexResponse;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.action.search.SearchType;
    import org.elasticsearch.client.transport.TransportClient;
    import org.elasticsearch.common.settings.Settings;
    import org.elasticsearch.common.transport.InetSocketTransportAddress;
    import org.elasticsearch.common.xcontent.XContentBuilder;
    import org.elasticsearch.common.xcontent.XContentFactory;
    import org.elasticsearch.index.query.QueryBuilder;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.SearchHit;
    import org.elasticsearch.search.SearchHits;
    import org.elasticsearch.search.sort.SortOrder;
    import org.elasticsearch.transport.client.PreBuiltTransportClient;
    
    /**
      * 【描述】:  ELK java API 接口 ,包括查询,删除,插入等待
      * 【步骤】:     
      * @param
    * @return    
    * @throws       
    * @author    Allen
      * @date      2017/7/4 9:47
      */
    public class ElasticsearchUtil {
       private static TransportClient client;
       private static String elasticIp = "192.168.211.50";
       private static int elasticPort = 9300;
    
    
       /**
         * 【描述】:  初始化ElasticSearch对象
         * 【步骤】:
         * @param
    * @return
    * @throws
    * @author    Allen
         * @date      2017/7/4 15:19
         */
    public static void init() throws UnknownHostException, InterruptedException, ExecutionException {
          //设置ES实例的名称.put("client.transport.sniff", true) //自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中
          Settings esSettings = Settings.builder().put("cluster.name", "elasticsearch").build();
          client = new PreBuiltTransportClient(esSettings);//初始化client较老版本发生了变化,此方法有几个重载方法,初始化插件等。
          //此步骤添加IP,至少一个,其实一个就够了,因为添加了自动嗅探配置
          client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(elasticIp), elasticPort));
          System.out.println("连接建立成功");
       }
    
    
       /**
         * 【描述】:  创建index,把其中的文档转化为json的格式存储
         * 【步骤】:
         * @param       <Node>:节点ip <port>:节点端口号,默认9200 <Index>:索引名 <Type>:索引类型 <ID>:操作对象的ID号
        * @return
    * @throws
    * @author    Allen
         * @date      2017/7/5 9:42
         */
    public static void createIndex() throws ElasticsearchException,IOException {
          for (int i=300; i<=50000000;i++){
             User user = new User();
             user.setId(1);
             user.setName("huang fox " + i);
             user.setAge(i % 100);
             IndexResponse indexResponse = null;
             indexResponse = client.prepareIndex("users", "user",i+"").setSource(generateJson(user)).execute().actionGet();
             System.out.println("responseIsCreated: "+indexResponse);
          }
          System.out.println("it is ok !");
       }
    
       public static void query() throws Exception {
          //term查询
          //QueryBuilder queryBuilder = QueryBuilders.termQuery("age", 50) ;  //年龄等于50
          //range查询
          QueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gt(50); //年龄大于50
          SearchResponse searchResponse = client.prepareSearch("users")
                .setTypes("user")
                .setQuery(rangeQueryBuilder)     //query
                .setPostFilter(QueryBuilders.rangeQuery( "age" ).from( 70 ).to( 80 )) // Filter
                .addSort("age", SortOrder.DESC)
                .setSize(120)   // 不设置的话,默认取10条数据
                .execute().actionGet();
          SearchHits hits = searchResponse.getHits();
          System.out.println("查到记录数:"+hits.getTotalHits());
          SearchHit[] searchHists = hits.getHits();
          if(searchHists.length>0){
             for(SearchHit hit:searchHists){
                String name =  (String) hit.getSource().get("name");
                Integer age = Integer.parseInt( hit.getSource().get("age").toString() );
                System.out.format("name:%s ,age :%d 
    ",name ,age);
             }
          }
       }
    
    
       /**
        * 转换成json对象
        *
        * @param user
    * @return
    */
    private static String generateJson(User user) {
          String json = "";
          try {
             XContentBuilder contentBuilder = XContentFactory.jsonBuilder().startObject();
             contentBuilder.field("id", user.getId());
             contentBuilder.field("name", user.getName());
             contentBuilder.field("age", user.getAge());
             json = contentBuilder.endObject().string();
          } catch (IOException e) {
             e.printStackTrace();
          }
          return json;
       }
    
    
       /*
        * Get index 获取文档相当于读取数据库的一行数据
        */
       public static void getIndex(){
          GetResponse getresponse = client.prepareGet("users", "user", "402").execute().actionGet();
          System.out.println(getresponse.getSourceAsString());
       }
    
       /*
        *Delete index 相当于删除一行数据
        */
       public static void delete(){
          DeleteResponse deleteresponse = client.prepareDelete("users", "user","1").execute().actionGet();
          System.out.println(deleteresponse.getVersion());
       }
    
       /*
        *Delete index 删除索引及该索引所管辖的记录
        */
       public static void deleteIndex(){
          //删除所有记录
          DeleteIndexResponse deleteIndexResponse = client.admin().indices().prepareDelete("logs").execute().actionGet();
          System.out.println(deleteIndexResponse.isAcknowledged());
       }
    
       /**
         * 【描述】:     获取到所有的索引
         * 【步骤】:
         * @param
    * @return
    * @throws
    * @author    Allen
         * @date      2017/7/4 16:27
         */
    public static void getAllIndex(){
          ClusterStateResponse response = client.admin().cluster().prepareState().execute().actionGet();
          //获取所有索引
          String[] indexs=response.getState().getMetaData().getConcreteAllIndices();
          for (String index : indexs) {
             System.out.println( index + " delete" );//
          }
       }
    
    
    
       public void close(){
          //on shutdown 断开集群
          client.close();
       }
    
       public static void main( String[] args ) {
          try {
             init();
             //createIndex();
             //getIndex();
             //delete();
             //deleteIndex();
             //getAllIndex();
             query();
          } catch( Exception e ) {
             e.printStackTrace();
          }
       }
    
    }
    
    
    class User{
    
       private static final long serialVersionUID = 5290251719938640641L;
    
       private Integer id;
       private String name;
       private int age;
    
       public Integer getId() {
          return id;
       }
    
       public void setId( Integer id ) {
          this.id = id;
       }
    
       public String getName() {
          return name;
       }
    
       public void setName( String name ) {
          this.name = name;
       }
    
       public int getAge() {
          return age;
       }
    
       public void setAge( int age ) {
          this.age = age;
       }
    }
     
  • 相关阅读:
    Asp.net 连接池使用
    关于ASP.NET页面打印技术的总结
    Asp.net页面传值总结
    C#委托
    ASP.NET状态存储管理九大兵器
    JavaScript取ASP.NET中服务器端数据的方法
    DSOFramer.ocx 控件使用
    C#2.0 泛型学习(入门)
    黑马程序员——Java基础String与StringBuilder
    黑马程序员——Java基础语法关键字、常量、变量、运算符
  • 原文地址:https://www.cnblogs.com/sessionbest/p/9124004.html
Copyright © 2020-2023  润新知