ElasticSearch6和java加Layui简单的分词,关键字高亮,并且带分页的查询

首先贴上结果

贴上核心代码

package com.hw.web;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @program: Maven
 * @description:
 * @author: hw
 * @create: 2018-12-29 12:13
 **/
public class FindAction extends BaseAction {
    //设置集群名
    private static Settings settings = Settings.builder().put("cluster.name", "my-application").build();
    private static TransportClient client;

    {
        try {
            //连接服务器
            client = new PreBuiltTransportClient(settings)
                    .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.217.155"), 9300));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }


    public void find() {
        //分页
        PageBean pageBean = new PageBean();
        pageBean.setPageBean(request);

        //查询条件
        MatchQueryBuilder builder = null;
        if (StringUtils.isBlank(request.getParameter("title"))) {
            builder = QueryBuilders.matchQuery("title", request.getParameter("title"));
        }
        //关键字高亮
        HighlightBuilder highlightBuilder = new HighlightBuilder()
                .field("title")
                .preTags("<span style='color:red;font-weight:bold;font-size:15px;'>")
                .postTags("</span>");


        //获取查询的数据,from为开始数.size为查询数
        SearchResponse response = client.prepareSearch("bank").setTypes("doc").setQuery(builder)
                .highlighter(highlightBuilder)
                .setPostFilter(builder)
                .setFrom((pageBean.getPage() - 1) * pageBean.getRows())
                .setSize(pageBean.getRows()).get();

        //得到数据的集合
        SearchHits hits = response.getHits();
        //总条数
        SearchResponse response1 = client.prepareSearch("bank").setTypes("doc")
                .setQuery(builder)
                .setPostFilter(builder).get();
        //集合容器
        List<Map<String, Object>> list = new ArrayList<>(15);

        //遍历数据
        for (SearchHit hit : hits) {

            // 得到SearchHit对象  获得高亮关键字
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            if (StringUtils.isBlank(request.getParameter("title"))) {
                Text[] text = hit.getHighlightFields().get("title").getFragments();
                String hight = "";
                if (text != null) {
                    for (Text str : text) {
                        hight += str;
                    }
                }
                sourceAsMap.put("title", hight);
            }
            list.add(sourceAsMap);
        }

        //组装成layuitable的数据
        JSONObject object = new JSONObject();
        object.put("code", 0);
        object.put("msg", "");
        object.put("count", response1.getHits().getTotalHits());
        // object.put("limit", bean.get);
        object.put("data", list);
        String str = JSON.toJSONString(object);
        try {
            super.print(str, super.response);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

Elasticsearch的安装教程:

https://blog.csdn.net/qq_41594146/article/details/85277395

完整代码下载地址不能免费所以选了1cb

https://download.csdn.net/download/qq_41594146/10886120

实现数据库和elasticsearch数据同步教程

https://blog.csdn.net/plei_yue/article/details/78317980

如果过程遇到报错可以试着借鉴:

https://www.cnblogs.com/hafiz/p/5879432.html

如果没有cb的话可以联系我q:1559810637

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值