springboot整合elasticsearch并高亮显示(layui页面)
前面安装的话很复杂我就不去写博客,我这里有资料,如果你们需要的话我可以发给你们,到时候留言就好了!!!
开始下面的教程吧!!!
我们都知道springboot一开始的步骤都是从pom文件开始的。
pom.xml文件引入的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入模板引擎thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--json-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.15</version>
</dependency>
</dependencies>
这只是简单的使用了一下 所以application.yml就没有配置了
当然你使用ES的时候肯定是得连接服务器的
@Component
public class ESConfig {
private TransportClient transportClient;
public TransportClient getClient() throws UnknownHostException {
//连接服务器 cluster.name,my-application这俩个参数是你ES配置文件中的参数,如果你没修改的话这是默认的
//java连接的端口是9300
transportClient=new PreBuiltTransportClient(Settings.builder().put("cluster.name","my-application").build())
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.254.137"),9300));
return transportClient;
}
}
实体类:
//记得提供get、set方法
public class Log {
private Integer prod_id;
private String prod_name;
private String prod_type;
private String prod_batch;
private String prod_unit;
private String prod_price;
private String prod_memo;
}
直接来看操作吧
Controller层:
@Controller
public class EsController {
@Autowired
ESConfig esConfig;
@RequestMapping("/getes")
@ResponseBody
public Map<String,Object> getEs(String prod_name) throws Exception {
//读取那个索引
SearchRequestBuilder searchRequestBuilder=esConfig.getClient().prepareSearch("blog");
searchRequestBuilder.setTypes("log");
//设置每批读取的数据量
searchRequestBuilder.setSize(1000);
//默认是查询所有
//searchRequestBuilder.setQuery(QueryBuilders.queryStringQuery("*:*"));
//设置search context维护3分钟的有效期
searchRequestBuilder.setScroll(TimeValue.timeValueMillis(3));
//查询时间范围内的数据
//RangeQueryBuilder builder=QueryBuilders.rangeQuery("crawlerdate").from("2019-02-21").to("2019-03-01");
//根据prod_name来精确查询
MatchPhraseQueryBuilder builder=null;
if(!StringUtils.isEmpty(prod_name)){
builder=QueryBuilders.matchPhraseQuery("prod_name",prod_name);
}else{
//默认是查询所有
//searchRequestBuilder.setQuery(QueryBuilders.queryStringQuery("*:*"));
//这里你可以使用jdbc去连接数据库做查询 然后展现到前段页面 因为我这里没写也就不贴代码了
builder=QueryBuilders.matchPhraseQuery("prod_name","");
}
//根据prod_name来查询
//MatchQueryBuilder builder = QueryBuilders.matchQuery("prod_name", "幻想笔记本电脑");
//设置高亮字段
HighlightBuilder highlightBuilder=new HighlightBuilder()
.field("prod_name")
.preTags("<span style='color:red;font-weight:bold;font-size:15px;'>").postTags("</span>");
//获得首次查询结果
SearchResponse response=searchRequestBuilder.highlighter(highlightBuilder).setQuery(builder).setPostFilter(builder).get();
System.out.println("命中总数量:"+response.getHits().getTotalHits());
SearchHits hits = response.getHits();
List<Map<String,Object>> list=new ArrayList<>(15);
for (SearchHit hit:hits){
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
if(!StringUtils.isEmpty(prod_name)){
Text[] prod_names = hit.getHighlightFields().get("prod_name").getFragments();
String hight="";
if(prod_names!=null){
for (Text str:prod_names){
hight+=str;
}
}
sourceAsMap.put("prod_name",hight);
}
list.add(sourceAsMap);
}
SearchResponse response1=esConfig.getClient().prepareSearch("blog").setTypes("log")
.setQuery(builder).setPostFilter(builder).get();
Map<String,Object> map=new HashMap<>();
map.put("code",0);
map.put("msg","");
map.put("count",response1.getHits().getTotalHits());
map.put("data",list);
return map;
}
@RequestMapping("/")
public String get(){
return "index";
}
}
效果:
我这就没很多数据了
如果你要导入数据的话可以看这篇https://blog.****.net/qq_41594146/article/details/88615977 他这里整合的是多张表的,你对这改一下就好了