ElasticSearch Java查询API

1. 指定索引名称、索引类型、文档id查询
// 指定索引名称( book , 类型( novel , 文档 id 查询指定文档信息
      GetResponse response = client .prepareGet( "book" , "novel" , "CxbTS2IB4IMtp9nTkkmQ" ).execute().actionGet();
      System. out .println( response .getSourceAsString());
2. 以文档中某一字段划定范围查询
// 索引( book ),类型( novel )、文档字段( word_count )的范围从 4500 6000 之间的文档
        RangeQueryBuilder rangeQueryBuilder = QueryBuilders. rangeQuery ( "word_count" ).from( "4500" ).to( "6000" );
//        RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("word_count"). gte (4000). lt (5000);
        SearchResponse response = client .prepareSearch( "book" ).setTypes( "novel" ).setQuery( rangeQueryBuilder ).execute().actionGet();
        List<Map<String, Object>> list = new ArrayList<>();
        SearchHits hits = response .getHits();
        for (SearchHit searchHit : hits ) {
           list .add( searchHit .getSource());
        }
3. 以文档中某一字段排序并从执行分页的操作
setFrom( 0 ):类似于分页的下标、索引,默认为 0
setSize( 10 ):分页的每页展示的数量,默认为 10
// 查询索引( book )、类型( novel )、从第 0 条开始、查询数量为 7 并按照 word_count 字段升序排序
      SearchResponse response = client .prepareSearch( "book" ).setTypes( "novel" ).addSort( "word_count" , SortOrder. ASC ).setFrom(0).setSize(7).execute().actionGet();
      List<Map<String, Object>> list = new ArrayList<>();
      SearchHits hits = response .getHits();
      for (SearchHit searchHit : hits ) {
        list .add( searchHit .getSource());
      }
4. 组合条件查询(bool查询)
bool 过滤可以用来合并多个过滤条件查询结果的布尔逻辑,它包含一下操作符:
  • must :: 多个查询条件的完全匹配,相当于 and。
  • must_not :: 多个查询条件的相反匹配,相当于 not。
  • should :: 至少有一个查询条件匹配, 相当于 or。
BoolQueryBuilder boolQuery = QueryBuilders. boolQuery ();
      boolQuery .must(QueryBuilders. matchQuery ( "author" , " 为名 " ));
      boolQuery .must(QueryBuilders. matchQuery ( "title" , "JS 算法与编程 " ));
      RangeQueryBuilder rangeQueryBuilder = QueryBuilders. rangeQuery ( "word_count" ).from(3500).to(5000);
      boolQuery .filter( rangeQueryBuilder );
      SearchResponse response = client .prepareSearch( "book" ).setTypes( "novel" ).setQuery( boolQuery ).execute().actionGet();
5. exist query 查询字段不为null的文档 查询字段address 不为null的数据
// 命中 publish_date 字段存在的文档
      ExistsQueryBuilder existsQuery = QueryBuilders. existsQuery ( "publish_date" );
      SearchResponse response = client .prepareSearch( "book" ).setTypes( "novel" ).setQuery( existsQuery ).setFrom(0).setSize(100).execute().actionGet();
6. 没有字段或值为null或没有值的文档
BoolQueryBuilder notExistQuery = QueryBuilders. boolQuery (). mustNot (QueryBuilders. existsQuery ( "publish_date" ));
        SearchResponse response = client .prepareSearch( "book" ).setTypes( "novel" ).setQuery( notExistQuery ).setFrom(0).setSize(100).execute().actionGet();
7. 查询指定字段内容命中
MatchPhraseQueryBuilder matchPhraseQuery = QueryBuilders. matchPhraseQuery ( "title" , "JS 基础 " );
      SearchResponse response = client .prepareSearch( "book" ).setTypes( "novel" ).setQuery( matchPhraseQuery ).setFrom(0).setSize(100).execute().actionGet();
8. 查询全部文档
MatchAllQueryBuilder matchAllQuery = QueryBuilders. matchAllQuery ();
      SearchResponse response = client .prepareSearch( "book" ).setTypes( "novel" ).setQuery( matchAllQuery ).setFrom(0).setSize(100).execute().actionGet();
9. 多字段匹配内容查询(模糊),multiMatchQuery(text,fields)其中的fields是字段的名字,可以写好几个,每一个中间用逗号分隔。
MultiMatchQueryBuilder multiMatchQuery = QueryBuilders. multiMatchQuery ( " 测试 " , "author" , "title" );
      SearchResponse response = client .prepareSearch( "book" ).setTypes( "novel" ).setQuery( multiMatchQuery ).setFrom(0).setSize(100).execute().actionGet();
10. 前缀查询 (一个汉字,字符小写)
PrefixQueryBuilder prefixQuery = QueryBuilders. prefixQuery ( "title" , "java" );
      SearchResponse response = client .prepareSearch( "book" ).setTypes( "novel" ).setQuery( prefixQuery ).setFrom(0).setSize(100).execute().actionGet();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值