es (7.7.1)与springboot整合

使用es的原因

es 基于内存的倒排索引算法,能够快速进行数据的索引

使用场景

1、本人在测试中实现了(vue) 下拉框的高亮显示以及快速查询
2、文本数据的快速索引,主要是文档(诗词内容的查询)
3、诗词中高频字词的汇总查询

pom 文件的引入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

加粗显示,以及合并(and)查询

@Override
public LayuiResponse query(Integer page, Integer limit, String title, String author, String paragraphs) {

    HighlightBuilder highlightBuilder = new HighlightBuilder();
    highlightBuilder.postTags("</strong>");
    highlightBuilder.preTags("<strong>");
    highlightBuilder.field("author");
    BoolQueryBuilder query = QueryBuilders.boolQuery();
    PageRequest pageRequest = PageRequest.of(page - 1, limit);
    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
    nativeSearchQueryBuilder.withPageable(pageRequest);

    if (!StringUtils.isEmpty(title)) {
        //query.must(matchQuery("title", title));
        query.must(termQuery("title", title.trim()));
        //  nativeSearchQueryBuilder.withQuery(matchQuery("title", title));
    }
    if (!StringUtils.isEmpty(author)) {
        query.must(matchQuery("author", author.trim()));
    }
    if (!StringUtils.isEmpty(paragraphs)) {
        query.must(matchQuery("paragraphs", paragraphs.trim()));
    }
    NativeSearchQuery build = nativeSearchQueryBuilder
            //查询中必须要有  nativeSearchQueryBuilder.withQuery(matchQuery("author", author)); 与之相对应才能高亮查询
            .withHighlightBuilder(highlightBuilder)
            .withQuery(query)
            .build();
    SearchHits<SongDoc> search = elasticsearchTemplate.search(build, SongDoc.class);
    Stream<SearchHit<SongDoc>> searchHitStream = search.get();
    List<SearchHit<SongDoc>> collect = searchHitStream.collect(Collectors.toList());
    List<SongDoc> list = new ArrayList<>();
    if (!CollectionUtils.isEmpty(collect)) {
        collect.forEach(songDocSearchHit -> {
            Map<String, List<String>> highlightFields = songDocSearchHit.getHighlightFields();
            System.out.println("highlightFields:" + highlightFields.size());
            SongDoc content = songDocSearchHit.getContent();
            if (null != highlightFields.get("author")) {
                content.setAuthor(highlightFields.get("author").get(0).toString());
            }
            list.add(content);
        });
    }


    LayuiResponse layuiResponse = new LayuiResponse();
    layuiResponse.setStatus(Status.SUCCESS);
    layuiResponse.setCount((int) search.getTotalHits());
    layuiResponse.setData(list);
    return layuiResponse;
}

高频词查询

@Override
public LayuiResponse songhighfrequencylist(Integer count) {
    PageRequest of = PageRequest.of(1, 1);
    LayuiResponse layuiResponse = new LayuiResponse();
    // FilterAggregationBuilder.
    //Aggregations aggregations=new Aggregations();
    //ValueCountAggregationBuilder result = AggregationBuilders.count("key_word").field("author");
    TermsAggregationBuilder field = AggregationBuilders.terms("group_name_keyword")
            .field("paragraphs")
            // .executionHint("map")
            .size(count);
    //.includeExclude(IncludeExclude.parseInclude()))

    NativeSearchQuery build = new NativeSearchQueryBuilder()
            //.withQuery(matchQuery("author", "宋太宗"))
            .withPageable(of)
            .addAggregation(field).build();
    long beginTime = System.currentTimeMillis();
    //SearchHits<SongDoc> search2 = elasticsearchTemplate.search(build, SongDoc.class);
    SearchHits<SongDoc> search = elasticsearchTemplate.search(build, SongDoc.class);
    long endTime = System.currentTimeMillis();
    System.out.println("时间(s)" + (endTime - beginTime));
    List<Integer> seriesDataList = new ArrayList<>();
    List<String> xAxisDataList = new ArrayList<>();
    if (search.hasAggregations()) {
        Aggregations aggregations = search.getAggregations();
        ParsedStringTerms aggregation = (ParsedStringTerms) aggregations.asMap().get("group_name_keyword");
        List<? extends Terms.Bucket> buckets = aggregation.getBuckets();
        buckets.forEach(bucket -> {
            seriesDataList.add((int) bucket.getDocCount());
            xAxisDataList.add(bucket.getKey().toString());
            System.out.println(bucket.getKey() + "\t" + bucket.getDocCount());
        });
        aggregation.getMetaData();
        // List<StringTerms.Bucket> buckets = group_name.getBuckets();
        // System.out.println(buckets.size());
        // Map<String, Object> metaData = group_name.getMetaData();
        // System.out.println(metaData);
    }
    EchartsDataVO echartsDataVO = new EchartsDataVO();
    echartsDataVO.setSeriesData(seriesDataList);
    echartsDataVO.setXAxisData(xAxisDataList);
    layuiResponse.setData(echartsDataVO);
    layuiResponse.setCode(20000);
    Stream<SearchHit<SongDoc>> searchHitStream = search.get();
    List<SearchHit<SongDoc>> collect = searchHitStream.collect(Collectors.toList());
    System.out.println(collect.size());
    return layuiResponse;
}

其它查询

@Override
public LayuiResponse queryByKeywords(String keywords) {
    HighlightBuilder highlightBuilder = new HighlightBuilder();
    highlightBuilder.postTags("</strong>");
    highlightBuilder.preTags("<strong>");
    highlightBuilder.field("name");
    // NativeSearchQuery query =new NativeSearchQueryBuilder().withQuery(QueryBuilders.termQuery("name", keywords)).withHighlightBuilder(highlightBuilder).build();
    //NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchQuery("name", keywords).operator(MatchQueryBuilder.o)).build();
    // NativeSearchQuery query =new NativeSearchQueryBuilder().withQuery(matchQuery("name", keywords)).build();
    NativeSearchQuery query = new NativeSearchQueryBuilder()
            //短语匹配:短语匹配意味着不仅仅是词要匹配,并且词的顺序也要一致
            //.withQuery(matchPhraseQuery("name", keywords))
            //可以指定词之间的逻辑关系 张三 李四 张三and 李四
            //.withQuery(matchQuery("name", keywords).operator(Operator.AND))
            //相关度查询
            // .withQuery(matchQuery("name", keywords).minimumShouldMatch("80%"))
            //设置权重查询
            // .withQuery(matchQuery("name", keywords).boost(10))
            .withQuery(matchQuery("name", keywords))
            .withHighlightBuilder(highlightBuilder).build();

    SearchHits<AuthorSelectDoc> searchResult = elasticsearchRestTemplate.search(query, AuthorSelectDoc.class);
    Stream<SearchHit<AuthorSelectDoc>> searchHitStream = searchResult.get();
    List<SearchHit<AuthorSelectDoc>> collect = searchHitStream.collect(Collectors.toList());
    LayuiResponse layuiResponse = new LayuiResponse();
    layuiResponse.setData(collect);
    return layuiResponse;
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352