zoukankan      html  css  js  c++  java
  • Elasticsearch 查询学习

    ElasticSearch 是什么

    ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    什么是全文检索

    全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。全文搜索搜索引擎数据库中的数据。

    spring data elasticsearch  ElasticsearchRepository

    基本操作与jpa相同       参考:https://blog.csdn.net/topdandan/article/details/81436141

    条件分页查询

      public void test(){
            //分页
            Pageable pageable =PageRequest.of(0,20);  
            //组合查询条件
            SearchQuery nativeSearchQueryBuilder =new NativeSearchQueryBuilder()
               //条件 
               .withQuery(QueryBuilders.matchPhraseQuery("filed","value")
              //排序
               .withSort(SortBuilders.fieldSort("filed").order(SortOrder.ASC))
               .withPageable(pageable)
               .build();
            Page<Object>  page =elasticsearchRepository.search(nativeSearchQueryBuilder);
            return page.getContent();
        }                                                                                                                                        

    聚合查询

    public void test() {
    //聚合字段 name为自定义聚合名称 field属性名称 ValueCountAggregationBuilder builder
    = AggregationBuilders.count("name").field("field");
    //组合查询 SearchQuery searchQuery
    = new NativeSearchQueryBuilder() .withQuery(QueryBuilders.matchPhraseQuery("field","value")) .addAggregation(builder ) .build();
    //分页信息 Page
    <Object> saleAmount = elasticsearchRecordRepository.search(searchQuery);
    //elasticsearchTemplate取得聚合结果 此方法只取聚合结果 Aggregation counts
    =elasticsearchTemplate.query(searchQuery,searchResponse -> { InternalValueCount count=(InternalValueCount)searchResponse.getAggregations().asList().get(0); return sum; }); System.out.println(saleAmount);
    }
    
    
    public void test()    {    
    TermsAggregationBuilder tb = AggregationBuilders.terms("name").field("field") SearchQuery searchQuery =new NativeSearchQueryBuilder()

    .withQuery(QueryBuilders.matchPhraseQuery(
    "field","value")) .withIndices(INDEX) .withTypes(TYPE) .addAggregation(tb) .build();
    //获取聚合值 Aggregations aggregations
    =elasticsearchTemplate.query(searchQuery, new ResultsExtractor<Aggregations>() { @Override public Aggregations extract(SearchResponse searchResponse) { return searchResponse.getAggregations(); } });
    List<Map> mapList=new ArrayList<>;
    //将聚合的值转换为map集合 Map
    <String,Aggregation> map =aggregations.asMap(); for (String s :map.keySet()){ StringTerms stringTerms = (StringTerms) map.get(s);
    //获取所有的桶 List
    <StringTerms.Bucket> list =stringTerms.getBuckets(); for (Terms.Bucket bucket :list){ System.out.println(" "+bucket.getKeyAsString()+ "----"+bucket.getDocCount() );
    String name = bucket.getKeyAsString();
    long count = bucket.getDocCount();  
    Map a = new HashMap();
    a.put("name",name);
    a.put("conut",count);
    mapList.add(a); } } }
  • 相关阅读:
    Codeforces1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)总结
    Codeforces 633H Fibonacci-ish II【线段树】
    一些Fibonacci数列的神奇性质【数学】
    Codeforces 620E New Year Tree【线段树傻逼题】
    Codeforces 828C String Reconstruction【并查集巧妙运用】
    Codeforces 559C Gerald and Giant Chess【组合数学】【DP】
    Codeforces 311B Cats Transport【斜率优化DP】
    BZOJ2933 [Poi1999]地图【区间DP】
    BZOJ3688 折线统计【树状数组优化DP】
    BZOJ2131 免费的馅饼【线段树优化DP】
  • 原文地址:https://www.cnblogs.com/xiaoxiaoliu/p/9670977.html
Copyright © 2011-2022 走看看