成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

springboot ElasticSearch 簡(jiǎn)單的全文檢索高亮

int64 / 2243人閱讀

前陣子和張三豐聊天提到了es。這次正好有機(jī)會(huì)學(xué)習(xí)并使用

首先引入依賴


            org.springframework.boot
            spring-boot-starter-data-elasticsearch

配置文件

spring.data.elasticsearch.local=true
spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.cluster-name=yourname
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300

然后 創(chuàng)建接口并繼承ElasticsearchRepository

idea 類(lèi)繼承 ElasticsearchRepository

package com.school.service;

import com.school.model.Idea;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;

@Component
public interface IdeaRepository extends ElasticsearchRepository {
}

下一步在需要使用的service 或 Controller中 引用

    @Autowired
    private IdeaRepository ideaRepository;      //esjap類(lèi)

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;    //es工具

使用save方法把數(shù)據(jù)保存到es中
業(yè)務(wù)代碼忽略... 保存就完事了

public void save(Long ideaId) {
        // 插入數(shù)據(jù)到es中
        Idea idea = this.selectById(ideaId);
        idea.setId(ideaId);
        ideaRepository.save(idea);
    }

全文檢索并高亮數(shù)據(jù)

這里注意分頁(yè)的頁(yè)數(shù)是從0開(kāi)始... 搞得我以為沒(méi)查到數(shù)據(jù)debug了很久

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.SearchResultMapper;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;


    @Autowired
    private IdeaRepository ideaRepository;      //esjap類(lèi)

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;    //es工具


/**
     * 從es檢索數(shù)據(jù)
     *
     * @param content  搜索關(guān)鍵字
     * @param pageNum  頁(yè)
     * @param pageSzie 條
     * @return
     */
public AggregatedPage getIdeaListBySrt(String content, Integer pageNum, Integer pageSzie) {
        Pageable pageable = PageRequest.of(pageNum, pageSzie);

        String preTag = "";//google的色值
        String postTag = "";

        SearchQuery searchQuery = new NativeSearchQueryBuilder().
                withQuery(matchQuery("ideaTitle", content)).
                withQuery(matchQuery("ideaContent", content)).
                withHighlightFields(new HighlightBuilder.Field("ideaTitle").preTags(preTag).postTags(postTag),
                        new HighlightBuilder.Field("ideaContent").preTags(preTag).postTags(postTag)).build();
        searchQuery.setPageable(pageable);
        
        // 不需要高亮直接return ideas 
        // AggregatedPage ideas = elasticsearchTemplate.queryForPage(searchQuery, Idea.class);
        
        // 高亮字段
        AggregatedPage ideas = elasticsearchTemplate.queryForPage(searchQuery, Idea.class, new SearchResultMapper() {

            @Override
            public  AggregatedPage mapResults(SearchResponse response, Class clazz, Pageable pageable) {
                List chunk = new ArrayList<>();
                for (SearchHit searchHit : response.getHits()) {
                    if (response.getHits().getHits().length <= 0) {
                        return null;
                    }
                    Idea idea = new Idea();
                    //name or memoe
                    HighlightField ideaTitle = searchHit.getHighlightFields().get("ideaTitle");
                    if (ideaTitle != null) {
                        idea.setIdeaTitle(ideaTitle.fragments()[0].toString());
                    }
                    HighlightField ideaContent = searchHit.getHighlightFields().get("ideaContent");
                    if (ideaContent != null) {
                        idea.setIdeaContent(ideaContent.fragments()[0].toString());
                    }

                    chunk.add(idea);
                }
                if (chunk.size() > 0) {
                    return new AggregatedPageImpl<>((List) chunk);
                }
                return null;
            }
        });
        return ideas;
    }

其他基礎(chǔ)接口直接使用 ideaRepository.

高亮寫(xiě)法借鑒代碼地址點(diǎn)我
其他方式查詢寫(xiě)法地址點(diǎn)我

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/72649.html

相關(guān)文章

  • Elasticsearch Java High Level REST Client(Search A

    摘要:搜索請(qǐng)求用于與搜索文檔聚合相關(guān)的任何操作,還提供了在結(jié)果文檔上請(qǐng)求高亮的方法。將字段高光色添加到高亮構(gòu)建器。稍后可以從中檢索高亮的文本片段。 Search API 搜索請(qǐng)求 SearchRequest用于與搜索文檔、聚合、suggestions相關(guān)的任何操作,還提供了在結(jié)果文檔上請(qǐng)求高亮的方法。 在最基本的表單中,我們可以向請(qǐng)求添加查詢: SearchRequest searchReq...

    liuhh 評(píng)論0 收藏0
  • springboot+ELK日志監(jiān)控系統(tǒng)

    摘要:簡(jiǎn)介是簡(jiǎn)稱是一個(gè)分布式的搜索和分析引擎,可以用于全文檢索結(jié)構(gòu)化檢索和分析,并能將這三者結(jié)合起來(lái)。基于開(kāi)發(fā),現(xiàn)在是使用最廣的開(kāi)源搜索引擎之一。是一個(gè)開(kāi)源的分析與可視化平臺(tái),設(shè)計(jì)出來(lái)用于和一起使用的。 ELK簡(jiǎn)介ELK是Elasticsearch+Logstash+Kibana簡(jiǎn)稱 Elasticsearch 是一個(gè)分布式的搜索和分析引擎,可以用于全文檢索、結(jié)構(gòu)化檢索和分析,并能將這三者結(jié)...

    gclove 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<