• 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); } } }
  • 相关阅读:
    WCF快速入门——WCF介绍
    《ERP从内部集成起步》读书笔记——第7章 全球经济与供需链管理 7.2形成供需链的五种流
    WCF快速入门——纯手工方式编写WCF入门程序
    《ERP从内部集成起步》读书笔记——第6章 效益指导物流——MRP II 6.3 MRP II的功能扩展
    WF中依赖属性的定义方法
    《ERP从内部集成起步》读书笔记——第6章 效益指导物流——MRP II 6.4 MRP II基本子系统配置
    C#游戏满堂红
    文本搜索器
    进度条控件的使用
    关于MEP中风管末端连接到风管的连接方式的问题
  • 原文地址:https://www.cnblogs.com/xiaoxiaoliu/p/9670977.html
Copyright © 2020-2023  润新知