首先贴上结果

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

贴上核心代码

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();
}
}

}