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); } } }
  • 相关阅读:
    Spring IoC和AOP使用扩展(二)
    Spring核心概念(一)
    MyBatis的动态SQL(五)
    MyBatis的SQL映射文件(四)
    初始myBatis(三)
    初始myBatis(二)
    微信小程序学习九 事件系统
    微信小程序学习八 wxs
    微信小程序学习七 视图层wxml语法
    微信小程序学习六 模块化
  • 原文地址:https://www.cnblogs.com/xiaoxiaoliu/p/9670977.html
Copyright © 2011-2022 走看看