微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JAVA操作ES中的BoolQueryBuilder 查询方法

一,创建es的连接
public TransportClient transportClient(){
    Settings settings = Settings.builder()
            .put("cluster.name","elasticsearch")
            .build();
    TransportClient client  = new PreBuiltTransportClient(settings);
    TransportAddress transportAddress = null;
    try {
        transportAddress = new TransportAddress(InetAddress.getByName(host),Integer.valueOf(port));
    } catch (UnkNownHostException e) {
        e.printstacktrace();
    }
    client.addTransportAddress(transportAddress);
    return client;
}
 

二,java es api的添加操作

transportClient.prepareIndex("search_index","doc").setSource(json,XContentType.JSON).get();

三,java es api的修改操作

transportClient.prepareUpdate("search_index","doc","gug4u3EBSHOgAqyn-5aI").setSource(json,XContentType.JSON).get();

四,java es api的删除操作

transportClient.prepareDelete("search_index","gug4u3EBSHOgAqyn-5aI").get();
 

五,查询QueryBuilders

BoolQueryBuilder queryBuilder= QueryBuilders.boolQuery();
1,matchAllQuery匹配所有

queryBuilder.matchAllQuery();
2,termQuery精准匹配,大小写敏感且不支持

queryBuilder.termQuery("key",value) 一次匹配一个值,完全匹配
queryBuilder.termsQuery("key",obj1,obj2..)   一次匹配多个值
3,matchPhraseQuery对中文精确匹配

queryBuilder.matchPhraseQuery("key",value)

4,matchQuery("key",Obj) 单个匹配,field不支持通配符,前缀具高级特性

queryBuilder.matchQuery(key,value);
5,multiMatchQuery("text","field1","field2"..); 匹配多个字段,field有通配符忒行

queryBuilder.multiMatchQuery(value,key1,key2,key3);
6,组合查询

   * must:   AND
   * mustNot: NOT
   * should:: OR
 queryBuilder.must(QueryBuilders.termQuery("user","kimchy"))
            .mustNot(QueryBuilders.termQuery("message","nihao"))
            .should(QueryBuilders.termQuery("gender","male"));

7.should和must

should查询MysqL中就好比是or或,但在es中使用should查询必须要和must一起使用才可以,相当于must[should A,should B],中文解释就好比是满足A或者是B条件的数据,如下这一段shoudl语句的大概意思是满足是用户A上传并且permission状态是private或者permission状态是public的
 

public void should(){
    // 最外层bool
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    // 使用should的bool
    BoolQueryBuilder shouldBuilder= QueryBuilders.boolQuery();

    BoolQueryBuilder must = QueryBuilders.boolQuery().must(QueryBuilders.termQuery(DocumentFieldEnum.upload_user_name.name(),"用户A"))               .must(QueryBuilders.termQuery(DocumentFieldEnum.permission.name(),PermissionEnum.PRIVATE.getKey()));

    shouldBuilder.should(must);
    shouldBuilder.should(QueryBuilders.termQuery(DocumentFieldEnum.permission.name(),PermissionEnum.PUBLIC.getKey()));
boolQueryBuilder.must(shouldBuilder);
}
 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐