(24)ElasticSearch java项目中组合查询示例

  查询interests字段包含changge并且不包含lvyou,或者address字段包含bei jing的文档,并且前面两种都要满足birthday>="1980-01-01"

@Test
    public void testBoolQuery() throws IOException, InterruptedException, ExecutionException {
        //指定集群
        Settings settings = Settings.builder().put("cluster.name","my-application").build(); 
        //创建客户端
        TransportClient client = new PreBuiltTransportClient(settings)
                                .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.43.151"),9300));
        //创建查询对象,查询interests字段包含changge并且不包含lvyou,或者address字段包含bei jing的文档,并且前面两种都要满足birthday>="1980-01-01"
        QueryBuilder qb = QueryBuilders.boolQuery()
                          .must(QueryBuilders.matchQuery("interests","changge"))
                          .mustNot(QueryBuilders.matchQuery("interests","lvyou"))
                          .should(QueryBuilders.matchQuery("address", "bei jing"))
                          .filter(QueryBuilders.rangeQuery("birthday").gte("1980-01-01").format("yyyy-MM-dd"));
        //执行查询
        SearchResponse sr = client.prepareSearch("lib3")
                                  .setQuery(qb)
                                  .get();
        //获取结果
        SearchHits hits = sr.getHits();
        for(SearchHit hit:hits) {
            //输出json
            System.out.println(hit.getSourceAsString());
            //输出json的key与value
            Map<String, Object> map = hit.getSourceAsMap();
            for(String key:map.keySet()) {
                System.out.println(key+"="+map.get(key));
            }
        }
        client.close();
   }

猜你喜欢

转载自www.cnblogs.com/javasl/p/12081814.html