elasticsearch案例

1.设计页面

  • searchAppWords.html(用的是freemark模板引擎只不过后缀被我改成.html形式的这样方面看html代码)
    • jQuery 和 BootStrap 引用的都是cdn资源 layer 需要下载下来放在resources静态资源下面
<!DOCTYPE html> 
    <html lang="en"> 
    <head> 
        <meta charset="utf-8"> 
        <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
        <meta name="description" content=""> 
        <meta name="author" content=""> 
        <base href="${request.contextPath}/">

        <title>ES分词搜索</title> 

        <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/css/bootstrap.min.css"> 
        <link rel="stylesheet" href="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/css/bootstrap-theme.min.css"> 

        <!--[if lt IE 9]><script src="../../docs-assets/js/ie8-responsive-file-warning.js"></script><![endif]--> 
        <!--[if lt IE 9]> 
            <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> 
            <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script> 
        <![endif]--> 
</head> 

<body class="bs-docs-home"> 
    <div class="container theme-showcase"> 
        <h1 style=" line-height:2em;"> </h1><br /> 

        <div class="row"> 
            <div class="col-sm-3"></div> 
        <div class="col-sm-12"> 
            <div class="panel panel-default"> 
                <div class="panel-heading"> 
                    <h3 class="panel-title"><strong>内容搜索</strong></h3> 
                </div> 
                <div class="panel-body"> 

                       <form role="form" name="form1" id="from1"> 

                           <div class="form-group"> 
                               <label for="IDCard">请输入您的词条</label> 
                               <div class="input-group"> 
                                   <input type="text" class="form-control" id="word" name="word" placeholder="词条" value="李"> 
                                   <span class="input-group-btn"> 
                                       <button class="btn btn-default" type="button" onClick="Es.submit(null);" >查询</button> 
                                   </span> 
                               </div> 
                           </div> 

                           <div class="form-group"> 
                               <label for="Subject">请选择需要搜索的分类</label> 
                               <div class="input-group"> 
                                   <input type="text" class="form-control" id="type" name="type" placeholder="请选择分类" value="政策法规" readonly="readonly"> 
                                   <div class="input-group-btn"> 
                                       <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">分类 <span class="caret"></span></button> 
                                       <ul class="dropdown-menu pull-right"> 
                                           <li><a href="javascript:void(0);" onClick="$('#type').val('政策法规');">政策法规</a></li> 
                                           <li><a href="javascript:void(0);" onClick="$('#type').val('诗词');">诗词</a></li> 
                                       </ul> 
                                   </div> 
                               </div> 
                           </div> 

                       </form> 

                       <div class="table-responsive"> 
                           <table  border="0" cellspacing="0" cellpadding="0" class="table"> 
                               <tr class=" label-info"> 
                                   <th scope="col" width="50%"  colspan="1" ><span style="color:white">标题</span></th> 
                                   <th scope="col" colspan="1" ><span style="color:white">内容</span></th> 
                               </tr> 
                           </table> 
                       </div>          
                   </div> 
               </div> 
           </div> 

           <div class="col-sm-3"></div> 
        </div> 

        <div class="form-inline text-right">
            <a class="btn btn-link " href="javascript:Es.submit('up');" id="up" role="button">上页</a>
            <a class="btn btn-link " href="javascript:Es.submit('next');" id="next" role="button">下页</a>
        <div class="form-group text-right">
            <div class="active" id="time">耗时:0/ms</div>
        </div>
        </div>

    </div>  
    <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script> 
    <script src="http://cdn.bootcss.com/twitter-bootstrap/3.0.1/js/bootstrap.min.js"></script> 
    <script src="resources/lib/layer-v3.1.1/layer/layer.js"></script> 
</body> 

<script type="text/javascript">

//传输参数
var param={
        page:0,
        pageSize:1,
};
//配置参数
var config={
        zcfgUrl:'http://59.203.15.62:1024/zcfg/',
        baidu:'http://www.baidu.com/s?wd=',
        type:null,
};

//测试政策法规参数
/* param.word="中国";
param.page=0;
param.pageSize=10;
param.index="zcfg";
param.type="zcfgData";
param.fileName="fileName,mainContent"; */

//测试诗词参数
/* param.word="李清照";
param.page=0;
param.pageSize=10;
param.index="projectname";
param.type="testPoetry";
param.fileName="title,content"; */

//Es接口
Es = {
    send:function(config){
        $('.tr').remove();
        layer.load();
        $.ajax({
               type: 'POST',
               url: 'es/queryHighlight',
               data: param,
               success: function(d){
                   console.log("返回数据",d);
                   console.log('当前页:'+page);
                   layer.closeAll();
                   var page=param.page;
                   var data=d.data;
                   var time=d.time;
                   if(data.length>0){
                       //重置下一页
                       $('#next').attr('href','javascript:Es.submit("next");');
                       console.log('下次传入参数:',param);
                       var html='';
                       $.each(data, function(i, n){
                            html +='<tr class="active tr">';
                            html +='   <td><pre>'+(data[i].fileName==undefined?data[i].title:data[i].fileName)+'</pre></td>';
                            if(data[i].mainContent!=undefined){
                                var url=config.zcfgUrl;
                                var title=data[i].fileName;
                                var reg=/<[^<>]+>/g;
                                title=title.replace(reg,'');
                                title=title.substring(0,title.indexOf('.'))+'.htm';
                                url+=title;
                                html +='  <td><a href="'+url+'" target="_blank"><pre>'+data[i].mainContent+'</pre></a></td>';
                            }else{
                                var url=config.baidu;
                                var title=data[i].title;
                                var reg=/<[^<>]+>/g;
                                title=title.replace(reg,'');
                                url+=title;
                                html +='  <td><a href="'+url+'" target="_blank"><pre>'+data[i].content+'</pre></a></td>';
                            }
                            html +='</tr>'  
                       });
                       $('.table').append(html);
                   }else{
                       html +='<tr class="warning tr" colspan="2">';
                       html +='<td colspan="2" class="text-center">没有检索到数据</td>';
                       html +='</tr>';
                       $('.table').append(html)
                       //下一页失效
                       $('#next').attr('href','javascript:void(0);');
                   }

                   $('#time').html('耗时:'+time+'/ms');

                   //警告
                   if(time<=50){
                       $('#time').attr({'class':'text-success'});
                   }else if(time>50 && time<=60){
                       $('#time').attr({'class':'text-warning'});
                   }else{
                       $('#time').attr({'class':'text-danger'});
                   }
               }
            });
    },
    submit:function(type){
        console.log(param);
        config.type=type;
        var type=$('#type').val();
        param.word=$('#word').val();
        if(type==='政策法规'){
            param.index="zcfg";
            param.type="zcfgData";
            param.fileName="fileName,mainContent";
        }else if(type==='诗词'){
            param.index="projectname";
            param.type="testPoetry";
            param.fileName="title,content";
        }
        if(config.type==='up'){
            if(param.page<=0){
                param.page=0;
            }else{
                param.page--;
            }
        }else if(config.type==='next'){
            param.page++;
        }else if(config.type===null){
            param.page=0;
        }
        Es.send(config);
    }
}
</script>

</html>

2.新建控制器

  • TestController.java
package com.iflytek.sc.pl.project.es.web.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Order;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.baomidou.mybatisplus.toolkit.StringUtils;
import com.iflytek.sc.pl.project.es.model.DocBean;
import com.iflytek.sc.pl.project.es.service.TestService;
import com.iflytek.sc.pl.project.es.util.EsUtils;

@Controller
@RequestMapping({"/es"})
public class TestController {


    @Resource(name = "esUtils")
    private EsUtils esUtils;

    @Autowired
    private TestService testService;


    @RequestMapping(value = "/esPage")
    public Object esPage() {
        return "/es/searchAppWords";
    }


    /**
    * @Title: list
    * @Description: TODO(oracle 数据测试接口)
    * @author gangyu2
    * @date 2018年8月6日下午5:10:13
     */
    @RequestMapping(value = "/test")
    @ResponseBody
    public Object list() throws Exception {
        return testService.list();
    }


    /**
    * @Title: bigData
    * @Description: TODO(自定义数据写入)
    * @param size
    * @author gangyu2
    * @date 2018年8月6日下午5:09:57
     */
    @RequestMapping(value = "/bigData")
    @ResponseBody
    public Map<String,Object> bigData(Integer size){
        return testService.bigData(size);
    }

    /**
    * @Title: dataPage
    * @Description: TODO(测试数据)
    * @param page
    * @param pageSize
    * @author gangyu2
    * @date 2018年8月6日下午5:09:33
     */
    @RequestMapping(value = "/dataPage")
    @ResponseBody
    public Map<String,Object> dataPage(Integer page,Integer pageSize){
        return testService.dataPage(page,pageSize);
    }

    /**
    * @Title: poetry
    * @Description: TODO(诗歌添加)
    * @author gangyu2
    * @date 2018年8月6日下午5:09:10
     */
    @RequestMapping(value = "/poetry")
    @ResponseBody
    public Map<String, Object> poetry(){
        return testService.poetry();
    }

    /**
    * @Title: singleQuery
    * @Description: TODO(单词查询)
    * @param word
    * @param page
    * @param pageSize
    * @author gangyu2
    * @date 2018年8月6日下午5:10:39
     */
    @RequestMapping(value = "/singleQuery")
    @ResponseBody
    public Map<String, Object> singleQuery(String word,Integer page,Integer pageSize){
        page=page==null?0:page;
        pageSize=pageSize==null?10:pageSize;
        page=page*pageSize;
        //排序只能是int字段
        List<Order> orderArr = new ArrayList<Order>();
        Order order = Order.asc("userId");
        orderArr.add(order);
        Order order1 = Order.asc("weight");
        orderArr.add(order1);
        Pageable pageable = PageRequest.of(page, pageSize,Sort.by(orderArr/*Sort.Direction.ASC, new String[] {"userId"}*/));
        return testService.singleQuery(word,pageable);
    }

    /**
    * @Title: queryHighlight
    * @Description: TODO(查询高亮)
    * @param word
    * @param page
    * @param pageSize
    * @param index
    * @param type
    * @author gangyu2
     * @throws ClassNotFoundException 
    * @date 2018年8月6日下午5:11:20
     */
    @RequestMapping(value = "/queryHighlight")
    @ResponseBody
    public Map<String,Object> queryHighlight(String word,Integer page,Integer pageSize,String index,String type,String fileName) throws ClassNotFoundException{
        page=page==null?0:page;
        pageSize=pageSize==null?10:pageSize;
        page=page*pageSize;
        //排序只能是int字段
        String file[]=null;
        if(StringUtils.isNotEmpty(fileName)) {
            file=fileName.split(",");
        }
        Pageable pageable = PageRequest.of(page, pageSize,Sort.by(Sort.Direction.ASC, new String[] {"userId"}));
        return testService.queryHighlight(word, pageable, index, type,file);
    }

    /**
    * @Title: zcfg
    * @Description: TODO(导入政策法规)
    * @author gangyu2
    * @date 2018年8月6日下午5:12:05
     */
    @RequestMapping(value = "/zcfg")
    @ResponseBody
    public Map<String, Object> zcfg(DocBean docBean){
        return testService.zcfg(docBean);
    }
}

3.新建接口

  • TestService.java
package com.iflytek.sc.pl.project.es.service;

import java.util.List;
import java.util.Map;

import org.springframework.data.domain.Pageable;

import com.iflytek.sc.pl.project.es.model.DocBean;

public interface TestService {

    public List<Map<String,Object>> list();

    Map<String,Object> bigData(Integer size);

    Map<String,Object> dataPage(Integer page,Integer pageSize);

    Map<String,Object> poetry();

    /**
    * @Title: singleQuery
    * @Description: TODO(分页查询)
    * @param word
    * @param pageble
    * @author gangyu2
    * @date 2018年8月6日下午2:11:27
     */
    Map<String,Object> singleQuery(String word,Pageable pageble);

    /**
    * @Title: queryHighlight
    * @Description: TODO(查询高亮)
    * @param word
    * @param pageable
    * @param index
    * @param type
    * @author gangyu2
    * @date 2018年8月6日下午2:11:12
     */
    Map<String,Object> queryHighlight(String word,Pageable pageable,String index,String type,String fileName[]) throws ClassNotFoundException;


    /**
    * @Title: zcfg
    * @Description: TODO(导入政策法规)
    * @author gangyu2
    * @date 2018年8月6日下午5:12:29
     */
    Map<String,Object> zcfg(DocBean docBean);
}

4.新建实现类

  • TestServiceImpl.java
package com.iflytek.sc.pl.project.es.service.impl;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.commons.lang3.RandomStringUtils;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.Operator;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;
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.query.IndexQuery;
import org.springframework.data.elasticsearch.core.query.IndexQueryBuilder;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Service;

import com.iflytek.sc.pl.project.es.dao.TestMapper;
import com.iflytek.sc.pl.project.es.model.DocBean;
import com.iflytek.sc.pl.project.es.model.SampleEntity;
import com.iflytek.sc.pl.project.es.model.TestPoetry;
import com.iflytek.sc.pl.project.es.service.TestService;
import com.iflytek.sc.pl.project.es.util.EsUtils;
import com.iflytek.sc.pl.project.es.util.GsonUtil;

@SuppressWarnings({ "unused", "unchecked", "serial"})
@Service
public class TestServiceImpl implements TestService{

    @Autowired
    private TestMapper testMapper;
    @Resource(name = "elasticsearchTemplate")
    private ElasticsearchTemplate elasticsearchTemplate;

    @Autowired
    private TransportClient transportClient;

    @Override
    public List<Map<String, Object>> list() {
        return testMapper.lists();
    }

    @Override
    public Map<String, Object> bigData(Integer size) {
        SampleEntity entity = null;
        List<IndexQuery> list=new ArrayList<IndexQuery>();
        IndexQuery indexQuery = null;
        for(int i=0;i<size;i++) {
            entity = new SampleEntity();
            entity.setId(System.currentTimeMillis()+Math.round(Math.random()*100000000)+"");
            entity.setContent(System.currentTimeMillis()+Math.round(Math.random()*5)+"");
            entity.setSex((int)Math.round(Math.random()*5));
            entity.setTitle("SampleEntity");
            entity.setUpdatetime(new Date());
            indexQuery = new IndexQueryBuilder().withId(entity.getId()).withObject(entity).build();
            list.add(indexQuery);
        }
        elasticsearchTemplate.bulkIndex(list);
        Map<String, Object > h = new HashMap<String, Object>(){{
              put("msg","插入数据"+size+"条");    
        }};
        return h;
    }

    @Override
    public Map<String, Object> dataPage(Integer page,Integer pageSize) {
        page=page==null?0:page;
        pageSize=pageSize==null?10:pageSize;
        page=page*pageSize;
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withPageable(PageRequest.of(page, pageSize))
                .build(); // 模糊分页
        List<SampleEntity> list = elasticsearchTemplate.queryForList(searchQuery, SampleEntity.class);
        Map<String, Object> h = new HashMap<String, Object>() {
            {
                put("msg", "成功");
            }
        };
        h.put("data", list);
        return h;
    }

    @Override
    public Map<String, Object> poetry() {
        TestPoetry poetry = null; 
        IndexQuery index =null;
        List<IndexQuery> list =new ArrayList<IndexQuery>();
        for(int i=0;i<EsUtils.getTitle().size();i++) {
            poetry = new TestPoetry();
            index = new IndexQuery();
            poetry.setId(String.valueOf(i));
            poetry.setTitle(EsUtils.getTitle().get(i));
            poetry.setContent(RandomStringUtils.randomAlphanumeric(10));
            poetry.setWeight(i);
            poetry.setUserId(i % 10);
            index = new IndexQueryBuilder().withId(poetry.getId()).withObject(poetry).build();
            index.setId(poetry.getId());
            list.add(index);
        }
        elasticsearchTemplate.bulkIndex(list);
        Map<String,Object> m=new HashMap<String,Object>(){{
            put("msg","添加诗歌"+EsUtils.getTitle().size()+"首");
        }};
        return m;
    }

    @Override
    public Map<String, Object> singleQuery(String word, Pageable pageble) {
//      word="";
        SearchQuery searcQuery = new NativeSearchQueryBuilder()
                //匹配多字段查询
                .withQuery(QueryBuilders.matchQuery("title",word))
                .withQuery(QueryBuilders.matchQuery("content","闺怨诗 宋·李清照 红藕香残玉簟秋。轻解罗裳,独上兰舟。云中谁寄锦书来?雁字回时,月"))
                //全文字段查询
                //.withQuery(QueryBuilders.queryStringQuery(word)).withPageable(pageble)
                .build();

        List<TestPoetry> list = elasticsearchTemplate.queryForList(searcQuery, TestPoetry.class);
        Map<String,Object> m=new HashMap<String,Object>(){{
            put("msg","字符串模糊查询,默认排序。将从所有字段中查找包含传来的word分词后字符串的数据集");
            put("data",list);
        }};
        return m;
    }

    @SuppressWarnings("rawtypes")
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
        Class c = Class.forName("com.iflytek.sc.pl.project.es.model.DocBean");  
        Method[] methods=c.getMethods();
        for(int i =0 ;i<methods.length;i++) {
            Method m1 = c.getMethod("setId",Integer.class);
            Object obj = c.newInstance();
            m1.invoke(obj,1);
            Method m2 = c.getMethod("getId");
            System.out.println(m2.invoke(obj));
            System.out.println();
        }
    }
    @Override
    public Map<String, Object> queryHighlight(String word, Pageable pageable,String index,String type,String fileName[]) throws ClassNotFoundException {
        Long startTime=System.currentTimeMillis();
        //设置高亮显示
        HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(true);
        highlightBuilder.preTags("<span style='color:red'>");
        highlightBuilder.postTags("</span>");

        //查询对象 加上 双引号 表示强制要求 拆分一起
        QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder("\""+word+"\"");
//        QueryStringQueryBuilder queryBuilder = new QueryStringQsueryBuilder(word);
//        queryBuilder.analyzer("standard");
        //多字段
        for(String file:fileName) {
            queryBuilder.field(file).defaultOperator(Operator.AND);
        }
        //近似度 默认0没有词间距
        queryBuilder.phraseSlop(QueryStringQueryBuilder.DEFAULT_PHRASE_SLOP);

        //搜索
        SearchRequestBuilder searchRequestBuilder = transportClient.prepareSearch(index)
                //分页
                .setFrom(pageable.getPageNumber()).setSize(pageable.getPageSize())
                //数据表
                .setTypes(type)
                //设置查询类型 1.SearchType.DFS_QUERY_THEN_FETCH = 精确查询 2.SearchType.QUERY_THEN_FETCH = 扫描查询,无序
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                //查询调节剂
                .setQuery(queryBuilder)
                //根据评分倒叙
                .addSort("_score",SortOrder.DESC)
                //标签
                .highlighter(highlightBuilder)
                //设置是否按查询匹配度排序
                .setExplain(true); 
        SearchResponse searchResponse = searchRequestBuilder.get();

        SearchHits searchHits = searchResponse.getHits();
        SearchHit[] hits = searchHits.getHits();
        List<Object> resultList= new ArrayList<Object>();
        for (int i = 0; i < hits.length; i++) {
            SearchHit hit = hits[i];
            // 将文档中的每一个对象转换json串值
            String json = hit.getSourceAsString();
            // 元数据 返回Map可以通用
            Map<String,Object> dataMap = GsonUtil.parseObject(json, Map.class);


            // 获取对应的高亮域
            Map<String, HighlightField> result = hit.getHighlightFields();
            // 从设定的高亮域中取得指定域
            for(String file:fileName) {
                HighlightField titleField = result.get(file);
                if (titleField !=null) {
                    // 取得定义的高亮标签
                    Text[] titleTexts = titleField.fragments();
                    // 为title串值增加自定义的高亮标签
                    String title = "";
                    for (Text text : titleTexts) {
                        title += text;
                    }
                    dataMap.put(file, title);
                }
            }
            resultList.add(dataMap);
        }
        Map<String,Object> map = new HashMap<String,Object>(){
            {
                put("msg","分词高亮数据");
                put("data",resultList);
                put("time", System.currentTimeMillis()-startTime);
            }
        };
        return map;
    }

    @Override
    public Map<String, Object> zcfg(DocBean docBean) {
        IndexQuery index =null;
        List<IndexQuery> list =new ArrayList<IndexQuery>();
        for(int i=0;i<1;i++) {
            index = new IndexQuery();
            docBean.setCreateTime(new Date());
            index = new IndexQueryBuilder().withObject(docBean).build();
            list.add(index);
        }
        elasticsearchTemplate.bulkIndex(list);
        Map<String,Object> m=new HashMap<String,Object>(){{
            put("msg","导入政策法规"+EsUtils.getTitle().size());
        }};

        return m;
    }
}
  • EsUtils.java 工具类

package com.iflytek.sc.pl.project.es.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.stereotype.Component;


@Component
public class EsUtils implements InitializingBean, DisposableBean {
    private static final Logger logger = LoggerFactory.getLogger(EsUtils.class);
    private static String indexName = "test";
    private static String typeInfo = "test";
    private TransportClient client;
    private String ikurl;

    @Resource(name = "elasticsearchTemplate")
    private ElasticsearchTemplate elasticsearchTemplate;

    public ElasticsearchTemplate getElasticsearchTemplate() {
        return elasticsearchTemplate;
    }

    public void setElasticsearchTemplate(ElasticsearchTemplate elasticsearchTemplate) {
        this.elasticsearchTemplate = elasticsearchTemplate;
    }

    public String getIkurl() {
        return ikurl;
    }

    public void setIkurl(String ikurl) {
        this.ikurl = ikurl;
    }

    public static String getIndexName() {
        return indexName;
    }

    public static void setIndexName(String indexName) {
        EsUtils.indexName = indexName;
    }

    public static String getTypeInfo() {
        return typeInfo;
    }

    public static void setTypeInfo(String typeInfo) {
        EsUtils.typeInfo = typeInfo;
    }

    @Override
    public void destroy() throws Exception {
        try {
            logger.info("Closing elasticSearch  client");
            if (client != null) {
                client.close();
            }
        } catch (final Exception e) {
            logger.error("Error closing ElasticSearch client: ", e);
        }
    }


    @Override
    public void afterPropertiesSet() throws Exception {
        buildClient();
    }

    private void buildClient() throws Exception {
        client = (TransportClient) elasticsearchTemplate.getClient();
    }



    public static List<String> getTitle() {
        List<String> list = new ArrayList<>();
        list.add("《如梦令·常记溪亭日暮》");
        list.add("《醉花阴·薄雾浓云愁永昼》");
        list.add("《声声慢·寻寻觅觅》");
        list.add("《永遇乐·落日熔金》");
        list.add("《如梦令·昨夜雨疏风骤》");
        list.add("《渔家傲·雪里已知春信至》");
        list.add("《点绛唇·蹴[1]罢秋千》");
        list.add("《点绛唇·寂寞深闺》");
        list.add("《蝶恋花·泪湿罗衣脂粉满》");
        list.add("《蝶恋花 离情》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《减字木兰花·卖花担上》");
        list.add("《临江仙·欧阳公作《蝶恋花》");
        list.add("《临江仙·庭院深深深几许》");
        list.add("《念奴娇·萧条庭院》");
        list.add("《菩萨蛮·风柔日薄春犹早》");
        list.add("《菩萨蛮·归鸿声断残云碧》");
        list.add("《武陵春·风住尘香花已尽》");
        list.add("《一剪梅·红藕香残玉蕈秋》");
        list.add("《渔家傲·天接云涛连晓雾》");
        list.add("《鹧鸪天·暗淡轻黄体性柔》");
        list.add("《鹧鸪天·寒日萧萧上锁窗》");
        list.add("《一剪梅·红藕香残玉簟秋》");
        list.add("《如梦令·常记溪亭日暮》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《蝶恋花·泪湿罗衣脂粉满》");
        list.add("《蝶恋花·暖日晴风初破冻》");
        list.add("《鹧鸪天·寒日萧萧上锁窗》");
        list.add("《醉花阴·薄雾浓云愁永昼》");
        list.add("《鹧鸪天·暗淡轻黄体性柔》");
        list.add("《蝶恋花·永夜恹恹欢意少》");
        list.add("《浣溪沙》");
        list.add("《浣溪沙》");
        list.add("《如梦令·谁伴明窗独坐》");
        return list;
    }

    public static List<String> getContent() {
        List<String> list = new ArrayList<>();
        list.add("初中 宋·李清照 常记溪亭日暮,沉醉不知归路,兴尽晚回舟,误入藕花深处。争渡,争渡");
        list.add("重阳节 宋·李清照 薄雾浓云愁永昼,瑞脑消金兽。佳节又重阳,玉枕纱厨,半夜凉初透。东");
        list.add("闺怨诗 宋·李清照 寻寻觅觅,冷冷清清,凄凄惨惨戚戚。乍暖还寒时候,最难将息。三杯两");
        list.add("元宵节 宋·李清照 落日熔金,暮云合璧,人在何处。染柳烟浓,吹梅笛怨,春意知几许。元");
        list.add("婉约诗 宋·李清照 昨夜雨疏风骤,浓睡不消残酒,试问卷帘人,却道海棠依旧。知否,知否");
        list.add("描写梅花 宋·李清照 雪里已知春信至,寒梅点缀琼枝腻,香脸半开娇旖旎,当庭际,玉人浴出");
        list.add(" 宋·李清照 蹴罢秋千,起来慵整纤纤手。露浓花瘦,薄汗轻衣透。见客入来,袜刬金");
        list.add("闺怨诗 宋·李清照 寂寞深闺,柔肠一寸愁千缕。惜春春去。几点催花雨。倚遍阑干,只是无");
        list.add("婉约诗 宋·李清照 泪湿罗衣脂粉满。四叠阳关,唱到千千遍。人道山长水又断。萧萧微雨闻");
        list.add("描写春天 宋·李清照 暖雨晴风初破冻,柳眼梅腮,已觉春心动。酒意诗情谁与共?泪融残粉花");
        list.add("寒食节 宋·李清照 淡荡春光寒食天,玉炉沈水袅残烟,梦回山枕隐花钿。海燕未来人斗草,");
        list.add(" 宋·李清照 髻子伤春慵更梳,晚风庭院落梅初,淡云来往月疏疏,玉鸭薰炉闲瑞脑,");
        list.add(" 宋·李清照 莫许杯深琥珀浓,未成沉醉意先融。疏钟已应晚来风。瑞脑香消魂梦断,");
        list.add("闺怨诗 宋·李清照 小院闲窗春已深,重帘未卷影沉沉。倚楼无语理瑶琴,远岫出山催薄暮。");
        list.add("爱情诗 宋·李清照 绣幕芙蓉一笑开,斜偎宝鸭亲香腮,眼波才动被人猜。一面风情深有韵,");
        list.add("描写春天 宋·李清照 卖花担上,买得一枝春欲放。泪染轻匀,犹带彤霞晓露痕。怕郎猜道,奴");
        list.add("》 宋·李清照 欧阳公作《蝶恋花》,有“深深深几许”之句,予酷爱之。用其语作“庭");
        list.add("描写梅花 宋·李清照 庭院深深深几许,云窗雾阁春迟,为谁憔悴损芳姿。夜来清梦好,应是发");
        list.add("寒食节 宋·李清照 萧条庭院,又斜风细雨,重门须闭。宠柳娇花寒食近,种种恼人天气。险");
        list.add("思乡诗 宋·李清照 风柔日薄春犹早,夹衫乍著心情好。睡起觉微寒,梅花鬓上残。故乡何处");
        list.add("描写春天 宋·李清照 归鸿声断残云碧,背窗雪落炉烟直。烛底凤钗明,钗头人胜轻。角声催晓");
        list.add("闺怨诗 宋·李清照 风住尘香花已尽,日晚倦梳头。物是人非事事休,欲语泪先流。闻说双溪");
        list.add(" 宋·李清照 红藕香残玉蕈秋,轻解罗裳,独上兰舟。云中谁寄锦书来?雁字回时,月");
        list.add("豪放诗 宋·李清照 天接云涛连晓雾。星河欲转千帆舞。仿佛梦魂归帝所。闻天语。殷勤问我");
        list.add("描写花 宋·李清照 暗淡轻黄体性柔。情疏迹远只香留。何须浅碧深红色,自是花中第一流。");
        list.add("描写秋天 宋·李清照 寒日萧萧上琐窗,梧桐应恨夜来霜。酒阑更喜团茶苦,梦断偏宜瑞脑香。");
        list.add("闺怨诗 宋·李清照 红藕香残玉簟秋。轻解罗裳,独上兰舟。云中谁寄锦书来?雁字回时,月");
        list.add(" 宋·李清照 常记溪亭日暮。沈醉不知归路。兴尽晚回舟,误入藕花深处。争渡。争渡");
        list.add(" 宋·李清照 莫许杯深琥珀浓。未成沈醉意先融。已应晚来风。瑞脑香消魂梦断,");
        list.add(" 宋·李清照 小院闲窗春色深。重帘未卷影沈沈。倚楼无语理瑶琴。远岫出山催薄暮,");
        list.add(" 宋·李清照 淡荡春光寒食天。玉炉沈水袅残烟。梦回山枕隐花钿。海燕未来人斗草,");
        list.add(" 宋·李清照 泪湿罗衣脂粉满。四叠阳关,唱到千千遍。人道山长山又断。萧萧微雨闻");
        list.add(" 宋·李清照 暖日晴风初破冻。柳眼眉腮,已觉春心动。酒意诗情谁与共。泪融残粉花");
        list.add(" 宋·李清照 寒日萧萧上锁窗。梧桐应恨夜来霜。酒阑更喜团茶苦,梦断偏宜瑞脑香。");
        list.add(" 宋·李清照 薄雾浓云愁永昼。瑞脑消金兽。佳节又重阳,玉枕纱厨,半夜凉初透。东");
        list.add(" 宋·李清照 暗淡轻黄体性柔。情疏迹远只香留。何须浅碧深红色,自是花中第一流。");
        list.add(" 宋·李清照 永夜恹恹欢意少。空梦长安,认取长安道。为报今年春色好。花光月影宜");
        list.add(" 宋·李清照 髻子伤春慵更梳。晚风庭院落梅初。淡云来往月疏疏。玉鸭熏炉闲瑞脑,");
        list.add(" 宋·李清照 绣面芙蓉一笑开。斜飞宝鸭衬香腮。眼波才动被人猜。一面风情深有韵,");
        list.add(" 宋·李清照 谁伴明窗独坐,我共影儿俩个。灯尽欲眠时,影也把人抛躲。无那,无那");
        return list;
    }

}

5.最终页面效果

这里写图片描述

猜你喜欢

转载自blog.csdn.net/BeiShangBuZaiLai/article/details/82112131