zoukankan      html  css  js  c++  java
  • Elasticsearch之javaAqi

    一. 创建Maven项目

    1.1 导入pom.xml

         <dependency>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
                <version>5.4.2</version>
            </dependency>
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>transport</artifactId>
                <version>5.4.2</version>
            </dependency>

    主版本需要与服务器版本一致

    1.2 elasticsearch.yml

     

    二 . 查询代码实例

    2.1 代码
      
          //指定Es集群
              Settings settings = Settings.builder().put("cluster.name","my-elasticsearch").build();
              //创建访问Es服务器的客户端
              TransportClient client = new PreBuiltTransportClient(settings)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"), 9300));
      ​
              //数据查询
              GetResponse rs=client.prepareGet("lib","user","AW4ba3-CtOQsl6jnKxI_").get();
              //得到查询出的数据
              System.out.println(rs.getSourceAsString());
              System.out.println("-----------");
              //只取名称
              System.out.println(rs.getSource().get("name"));
              client.close();

    三 . 添加文档代码实例

    3.1 代码
        //指定Es集群
          Settings settings = Settings.builder().put("cluster.name","my-elasticsearch").build();
          //创建访问Es服务器的客户端
          TransportClient client = new PreBuiltTransportClient(settings)
                  .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"), 9300));
      ​
          //组建文档内容
          XContentBuilder doc=XContentFactory.jsonBuilder()
                  .startObject()
                  .field("id",1)
                  .field("title","java设计模式之装饰模式")
                  .field("content","春天,我们去郊游,杏花吹了一头,这是多么惬意和美好,就像美好洒了一头一样。好巧不巧,在这里,"
                          + "碰到一个风流倜傥的男子,我真的好喜欢他。美丽的春日,碰到一见钟情的人,有比这更美好的事吗?")
                  .field("postdate","2020-01-09")
                  .field("url","http://192.168.95.4:5601/app/kibana#/dev_tools/console?_g=()")
                  .endObject();
          //添加文档
          IndexResponse response=client.prepareIndex("lib", "blog","1")
                  .setSource(doc).get();
          //返回状态是否添加成功
          System.out.println(response.status());
          //关闭来连接
          client.close();

    四. 删除文档代码实例

    4.1 .1代码部分
      //指定Es集群
              Settings settings = Settings.builder().put("cluster.name","my-elasticsearch").build();
              //创建访问Es服务器的客户端
              TransportClient client = new PreBuiltTransportClient(settings)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"), 9300));
              //删除文档
              DeleteResponse rs=client.prepareDelete("lib", "blog","1").get();
      ​
              //返回状态是否删除成功
              System.out.println(rs.status());
              //关闭来连接
              client.close();
    4.2.1 存在即修改,不存就报错
      
    //指定Es集群
              Settings settings = Settings.builder().put("cluster.name","my-elasticsearch").build();
              //创建访问Es服务器的客户端
              TransportClient client = new PreBuiltTransportClient(settings)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"), 9300));
              //修改文档
              UpdateRequest rqs=new UpdateRequest();
              rqs.index("lib")
              .type("blog")
              .id("1")
              .doc(
                      XContentFactory.jsonBuilder().startObject()
                      .field("title","java设计模式之单列设计模式").endObject()
                      );
      ​
              UpdateResponse rps=client.update(rqs).get();
              //返回状态是否删除成功
              System.out.println(rps.status());
              //关闭来连接
              client.close();
    4.2.2 文档不存在就添加,存在就修改
    //指定Es集群
            Settings settings = Settings.builder().put("cluster.name","my-elasticsearch").build();
            //创建访问Es服务器的客户端
            TransportClient client = new PreBuiltTransportClient(settings)
                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"), 9300));
            //修改文档,不存在就添加
            IndexRequest inq=new IndexRequest("lib", "blog", "2")
                    .source(
                            XContentFactory.jsonBuilder()
                            .startObject()
                            .field("id",2)
                            .field("title","工厂模式")
                            .field("content","静态工厂,实例工")
                            .field("postdate","2020-02-10")
                            .field("url","http://192.168.95.4:5601/app/kibana#/dev_tools/console?_g=()")
                            .endObject()
                            );
            //先修改,文档不存在执行后面的添加
            UpdateRequest uq=new UpdateRequest("lib", "blog", "3")
                    .doc(
                            XContentFactory.jsonBuilder()
                            .startObject()
                            .field("title","设计模式")
                            .endObject()
                            ).upsert(inq);
            //执行操作
            UpdateResponse rps=client.update(uq).get();
            //返回状态是否删除成功
            System.out.println(rps.status());
            //关闭来连接
            client.close();

    五.java应用中实现批量操作(mget&bulk)

    5.1.1 mget批量查询 ,java代码
               //1.指定es集群
                Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
                //2.创建访问es服务器的客服端
                TransportClient client=new PreBuiltTransportClient(setting)
                        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));//配置查询信息
            MultiGetResponse mget=client.prepareMultiGet()
                    .add("lib", "blog", "1")
                    .add("lib", "blog", "3").get();
            //展示信息
    
            for(MultiGetItemResponse ms:mget) {
                GetResponse grp=ms.getResponse();
                if(grp.isExists()&&grp!=null) {
                    System.out.println(grp.getSourceAsString());
                    System.err.println("___");
                    //System.out.println(grp.getSource().get("content"));//指定输出属性
                }
    }
    5.2.1 bulk批量添加,java代码
           //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              BulkRequestBuilder bulkbuild=client.prepareBulk();
              //批量添加
              bulkbuild.add(client.prepareIndex("lib1","books","1")
                      .setSource(
                              XContentFactory.jsonBuilder()
                              .startObject()
                              .field("title","python")
                              .field("price", 99)
                              .endObject()
                              )
                      );
              bulkbuild.add(client.prepareIndex("lib1","books","2")
                      .setSource(
                              XContentFactory.jsonBuilder()
                              .startObject()
                              .field("title","vr")
                              .field("price", 39)
                              .endObject()
                              )
                      );
              //执行操作
              BulkResponse rps=bulkbuild.get();
              //执行结果
              System.out.println(rps.status());
              if(rps.hasFailures()) {
                  System.out.println("失败了!");
              }
    5.3.1 bulk查询符合条件的属性,删除文档,java代码
          //1.指定es集群
                  Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
                  //2.创建访问es服务器的客服端
                  TransportClient client=new PreBuiltTransportClient(setting)
                          .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
                  BulkRequestBuilder bulkbuild=client.prepareBulk();
          BulkByScrollResponse rsp=DeleteByQueryAction.INSTANCE
                      .newRequestBuilder(client)
                      .filter(QueryBuilders.matchQuery("title", "设计"))
                      //指定索引
                      .source("lib").get();
              //返回结果,返回影响行数
              long result=rsp.getDeleted();
              System.out.println(result);
    5.4.1 全部查询,java代码
    //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //查询所有
              MatchAllQueryBuilder qd=QueryBuilders.matchAllQuery();
              SearchResponse sr=client.prepareSearch("lib*")
                      .setQuery(qd)
                      .setSize(5).get();
              //查出所有文档
              SearchHits hits=sr.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();

    六. java中实现match与multimatch查询

    6.1 .1 matc指定条件查询,java代码
     
      //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //查询content属性中带有"工厂"的文档,模糊查询,用的ik分词器
              MatchQueryBuilder builder=QueryBuilders.matchQuery("content", "工厂");
              
              SearchResponse sr=client.prepareSearch("lib*")
                      .setQuery(builder)
                      .setSize(5).get();
              //查出所有文档
              SearchHits hits=sr.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();
    6.2.1 multiMatch多条件查询,java代码
      @Test
          public void multiMatchByElasticsearch() throws IOException {
              //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //查询content属性title中带有"一见钟情"的文档,模糊查询,用的ik分词器
              MultiMatchQueryBuilder builder=QueryBuilders.multiMatchQuery("一见钟情", "content","title");
              //从全部以lib开始的索引下找,显示5条
              SearchResponse sr=client.prepareSearch("lib*")
                      .setQuery(builder)
                      .setSize(5).get();
              //查出所有文档
              SearchHits hits=sr.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();
          }
      

    七.term和terms查询

    7.1.1 term条件查询,java代码
      
    //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //查询content属性title中带有"静态"的文档,模糊查询,用的ik分词器
              TermQueryBuilder builder=QueryBuilders.termQuery("content","静态");
              //从全部以lib开始的索引下找,显示5条
              SearchResponse sr=client.prepareSearch("lib*")
                      .setQuery(builder)
                      .setSize(5).get();
              //查出所有文档
              SearchHits hits=sr.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();
    7.2.1 terms多条件查询(指定一个属性配配多个值)
          //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
          //查询content属性中带有"工厂"或者"春天"的所有文档,一个属性匹配多个值,模糊查询,用的ik分词器
              TermsQueryBuilder builder=QueryBuilders.termsQuery("content","工厂","春天");
              //从全部以lib开始的索引下找,显示5条
              SearchResponse sr=client.prepareSearch("lib*")
                      .setQuery(builder)
                      .setSize(5).get();
              //查出所有文档
              SearchHits hits=sr.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();

    八 . java中实现range,prefix,wildcard,fuzzy,type,ids查询

    8.1.1 range时间范围查询,java代码
          //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //range查询,查询postdate时间范围在"2018-01-01~2030-01-01"之间的文档记录
              RangeQueryBuilder builder=QueryBuilders.rangeQuery("postdate").from("2018-01-01").to("2030-01-01").format("yyyy-MM-dd");
              //从全部以lib开始的索引下找,查询所有
              SearchResponse sr=client.prepareSearch("lib*")
                      .setQuery(builder).get();
              //查出所有文档
              SearchHits hits=sr.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();
    8.2.1 prefix(前缀)查询,java代码
      //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //prefix查询,查询url内容以http开头的
              PrefixQueryBuilder builder=QueryBuilders.prefixQuery("url","http");
              //从全部以lib开始的索引下找,查询所有
              SearchResponse sr=client.prepareSearch("lib*")
                      .setQuery(builder).get();
              //查出所有文档
              SearchHits hits=sr.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();
    8.3.1 wildcard(通配符)查询
     //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //wildcard(通配符)查询,查询content内容有“春日”的文档
              WildcardQueryBuilder builder=QueryBuilders.wildcardQuery("content","*春日*");
              //从全部以lib开始的索引下找,查询所有
              SearchResponse sr=client.prepareSearch("lib*")
                      .setQuery(builder).get();
              //查出所有文档
              SearchHits hits=sr.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();
    8.4.1 Fuzzy(模糊)查询,java代码
      
      //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //fuzzy(模糊)查询,查询content内容有“好巧”的文档
              FuzzyQueryBuilder builder=QueryBuilders.fuzzyQuery("content","更美好");
              //从全部以lib开始的索引下找
              SearchResponse sr=client.prepareSearch("lib*")
                      .setQuery(builder).get();
              //查出所有文档
              SearchHits hits=sr.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();
    8.5.1 Type(类型)查询,java代码
            
      //1.指定es集群
            Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
            //2.创建访问es服务器的客服端
            TransportClient client=new PreBuiltTransportClient(setting)
                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
            //type(类型)查询,查询类型为“blog”的文档
            TypeQueryBuilder builder=QueryBuilders.typeQuery("books");
            //从全部以lib开始的索引下找
            SearchResponse sr=client.prepareSearch("lib*")
                    .setQuery(builder).get();
            //查出所有文档
            SearchHits hits=sr.getHits();
            //迭代器打印结果
            Iterator<SearchHit> it=hits.iterator();
            while(it.hasNext()) {
                Map<String,Object> map=it.next().getSourceAsMap();
                for(String key:map.keySet()) {
                    System.out.println(key+":"+map.get(key));
                }
                System.out.println("--------------");
            }
            client.close();

      

    8.6.1 Ids查询,java代码
      
      //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //ids查询,根据指定的id查询
              IdsQueryBuilder builder=QueryBuilders.idsQuery().addIds("1","2");
              //从全部以lib开始的索引下找
              SearchResponse sr=client.prepareSearch("lib")
                      .setQuery(builder).get();
              //查出所有文档
              SearchHits hits=sr.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();

    九 .聚合查询

    9.1.1 max最大值查询,java代码
      
      //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //Max查询,price(价格)最大值查询
              AggregationBuilder agg=AggregationBuilders.max("aggMax").field("price");
              //从全部以lib开始的索引下找
              SearchResponse rsp=client.prepareSearch("lib*").addAggregation(agg).get();
              //取到最大值
              Max max=rsp.getAggregations().get("aggMax");
              //输出最大值
              System.out.println(max.getName()+":"+max.getValue());
      ​
              client.close();
    9.2.1 min最小值查询,java代码
      
      //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //min查询,price(价格)最小值查询
              AggregationBuilder agg=AggregationBuilders.min("aggMin").field("price");
              //从全部以lib开始的索引下找
              SearchResponse rsp=client.prepareSearch("lib*").addAggregation(agg).get();
              //取到最小值
              Min min=rsp.getAggregations().get("aggMin");
              //输出最小值
              System.out.println(min.getName()+":"+min.getValue());
      ​
              client.close();
     
    9.3.1 avg平均值查询,java代码
     
      //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //平均值查询,price(价格)平均值查询
              AggregationBuilder agg=AggregationBuilders.avg("aggAvg").field("price");
              //从全部以lib开始的索引下找
              SearchResponse rsp=client.prepareSearch("lib*").addAggregation(agg).get();
              //取到平均值
              Avg avg=rsp.getAggregations().get("aggAvg");
              //输出平均值
              System.out.println(avg.getName()+":"+avg.getValue());
              client.close();
    9.4.1 Sum总和值查询,java代码
     
      //1.指定es集群
          Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
          //2.创建访问es服务器的客服端
          TransportClient client=new PreBuiltTransportClient(setting)
                  .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
          //求总和值,price(价格)求总和值查询
          AggregationBuilder agg=AggregationBuilders.sum("aggSum").field("price");
          //从全部以lib开始的索引下找
          SearchResponse rsp=client.prepareSearch("lib*").addAggregation(agg).get();
          //取到总的价格
          Sum sum=rsp.getAggregations().get("aggSum");
          //输出求总和值
          System.out.println(sum.getName()+":"+sum.getValue());
          client.close();
    9.5.1 cardinality查询,java代码
    //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //求基数值
              AggregationBuilder agg=AggregationBuilders.cardinality("aggcardinality").field("price");
              //从全部以lib开始的索引下找
              SearchResponse rsp=client.prepareSearch("lib*").addAggregation(agg).get();
              //取到有多少个基数值
              Cardinality aggcardinality=rsp.getAggregations().get("aggcardinality");
              //输出基数值
              System.out.println(aggcardinality.getName()+":"+aggcardinality.getValue());
              client.close();

    十.其他查询

    10.1.1 query String 条件查询,指定字段,java代码
    //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //全文查询,查询"python"这本书
              CommonTermsQueryBuilder builder=QueryBuilders.commonTermsQuery("title", "python");
              //从全部以lib开始的索引下找
              SearchResponse rsp=client.prepareSearch("lib*").setQuery(builder).get();
              //取到SearchHits对象
              SearchHits hits=rsp.getHits();
              for(SearchHit hit:hits) {
                  System.out.println(hit.getSourceAsString());
              }
              client.close();
     
    10.2.1 query String 全文查询,不指定字段,两边都需要满足,java代码
     
      //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //全文查询,查询有"工厂"但不包含有"更美好"字段的这个文档
              QueryStringQueryBuilder builder=QueryBuilders.queryStringQuery("+工厂 -更美好");
              //从全部以lib开始的索引下找
              SearchResponse rsp=client.prepareSearch("lib").setQuery(builder).get();
              //取到SearchHits对象
              SearchHits hits=rsp.getHits();
              for(SearchHit hit:hits) {
                  System.out.println(hit.getSourceAsString());
              }
              client.close();
     
    
     
    10.3.1 query String 全文查询,满足其中一个,不指定字段,java代码
       //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //全文查询,查询有"工厂"或者不包含有"更美好"字段的这个文档
              SimpleQueryStringBuilder builder=QueryBuilders.simpleQueryStringQuery("+工厂  -更美好");
              //从全部以lib开始的索引下找
              SearchResponse rsp=client.prepareSearch("lib").setQuery(builder).get();
              //取到SearchHits对象
              SearchHits hits=rsp.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();
     
    10.4.1 组合查询,java代码
      
      //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //组合查询
               BoolQueryBuilder builder=QueryBuilders.boolQuery()
                                 .must(QueryBuilders.matchQuery("content","工厂"))//必须包含
                                 .mustNot(QueryBuilders.matchQuery("content", "全部"))//不包含
                                 .should(QueryBuilders.matchQuery("title", "语法"))//或者包含
                                  //时间过滤(大于2020-03-01)
                                 .filter(QueryBuilders.rangeQuery("postdate").gte("2020-03-01").format("yyyy-MM-dd"));
              //从全部以lib开始的索引下找
              SearchResponse rsp=client.prepareSearch("lib").setQuery(builder).get();
              //取到SearchHits对象
              SearchHits hits=rsp.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();
     
    10.5.1 constantScoreQuery查询,java代码
    //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //组合查询,查title中包含有“正则”的文档,与termQuery()的作用类似
              ConstantScoreQueryBuilder builder=QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("title","正则"));
              //从全部以lib开始的索引下找
              SearchResponse rsp=client.prepareSearch("lib").setQuery(builder).get();
              //取到SearchHits对象
              SearchHits hits=rsp.getHits();
              //迭代器打印结果
              Iterator<SearchHit> it=hits.iterator();
              while(it.hasNext()) {
                  Map<String,Object> map=it.next().getSourceAsMap();
                  for(String key:map.keySet()) {
                      System.out.println(key+":"+map.get(key));
                  }
                  System.out.println("--------------");
              }
              client.close();
     

    十一.java应用中实现桶聚合

    11.1 分组聚合java代码

      
       /**
           *   桶聚合
           * @throws IOException 
           */
          @Test
          public void Query2Elasticsearch() throws IOException {
              //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              //按标题分组显示
              AggregationBuilder agg=AggregationBuilders.terms("terms").field("price");
              //从全部以lib开始的索引下找
              SearchResponse rsp=client.prepareSearch("lib1").addAggregation(agg).execute().actionGet();
              //取到分组数据
              Terms  terms=rsp.getAggregations().get("terms");
              for(Terms.Bucket te:terms.getBuckets()) {
                  System.out.println(te.getKey()+":"+te.getDocCount());
              }
          }
      }
     

    11.2 filter聚合(分组过滤)

        //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
              ///需要查找price为6666的分组
              TermQueryBuilder query=QueryBuilders.termQuery("price","6666");
              //按标题分组显示
              AggregationBuilder agg=AggregationBuilders.filter("filter",query);
              //从索引lib1下找
              SearchResponse rsp=client.prepareSearch("lib1").addAggregation(agg).execute().actionGet();
              //取到过滤后数据条数
              Filter  filter=rsp.getAggregations().get("filter");
              System.out.println(filter.getDocCount());
      

    11.3 filters聚合(多个过滤条件)

       //1.指定es集群
          Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
          //2.创建访问es服务器的客服端
          TransportClient client=new PreBuiltTransportClient(setting)
                  .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
      ​
          //按标题分组显示
          AggregationBuilder agg=AggregationBuilders.filters("filters",
                  new FiltersAggregator.KeyedFilter("py", QueryBuilders.termsQuery("title","python")),
                  new FiltersAggregator.KeyedFilter("vr", QueryBuilders.termsQuery("title","vr")));
          //从索引lib1下找
          SearchResponse rsp=client.prepareSearch("lib1").addAggregation(agg).execute().actionGet();
          //取到过滤后数据条数
          Filters  filters=rsp.getAggregations().get("filters");
          for(Filters.Bucket filter:filters.getBuckets()) {
              System.out.println(filter.getKey()+":"+filter.getDocCount());
          }

    11.4 range聚合

      //1.指定es集群
          Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
          //2.创建访问es服务器的客服端
          TransportClient client=new PreBuiltTransportClient(setting)
                  .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
      ​
          //按标题分组显示
          AggregationBuilder agg=AggregationBuilders.range("range")
                  .field("price")
                  .addUnboundedTo(60) //小于60以下
                  .addRange(1,7000)   //1-7000之间的
                  .addUnboundedFrom(50);//大于50以上的
          
          //从索引lib1下找
          SearchResponse rsp=client.prepareSearch("lib1").addAggregation(agg).execute().actionGet();
          //取到过滤后数据条数
          Range  rang=rsp.getAggregations().get("range");
          for(Range.Bucket r:rang.getBuckets()) {
              System.out.println(r.getKey()+":"+r.getDocCount());
          }

    11.5 missing(统计属性为null的条数,如下其实“prices”这个属性是不存在的)

      //1.指定es集群
              Settings setting=Settings.builder().put("cluster.name","my-elasticsearch").build();
              //2.创建访问es服务器的客服端
              TransportClient client=new PreBuiltTransportClient(setting)
                      .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.95.4"),9300));
          
              //按标题分组显示
              AggregationBuilder agg=AggregationBuilders.missing("missing").field("prices");
              
              //从索引lib1下找
              SearchResponse rsp=client.prepareSearch("lib1").addAggregation(agg).execute().actionGet();
              //取到过滤后数据条数
              Missing  miss=rsp.getAggregations().get("missing");
              System.out.println(miss.getDocCount());

     

     

  • 相关阅读:
    解决Java版CKFinder无法显示缩略图问题
    python视频教程大全
    关于Linux vi命令 vi命令一览表
    Python快速教程
    Linux的概念与体系
    每天一个linux命令目录
    每天一个linux命令(31): /etc/group文件详解
    每天一个linux命令(30): chown命令
    每天一个linux命令(29):chgrp命令
    十大Material Design开源项目
  • 原文地址:https://www.cnblogs.com/KdeS/p/12011609.html
Copyright © 2011-2022 走看看