运行tomcat,访问localhost:8080/solr
找到hl设置
进行下图的设置,就完成了高亮的设置:
然后我们搜一些自己能够搜索到的数据实例,就会发现底部会自动将查询的字段进行高亮显示
那在java中如何进行设置呢?SolrQuery solrQuery = new SolrQuery(); //构造搜索条件
solrQuery.setQuery("article_keywords:" +"\""+ q+"\""); //搜索关键词
// solrQuery.setQuery("article_keywords:" + keywords); //搜索关键词
solrQuery.setStart(0);
solrQuery.setRows(100);
// //设置权重
// solrQuery.set("defType","dismax");
// solrQuery.set("qf","article_title^2 article_summary^0.2");
//
solrQuery.setHighlight(true); // 开启高亮组件
solrQuery.addHighlightField("*");// 高亮字段
solrQuery.setHighlightSimplePre("");// 标记,高亮关键字前缀
solrQuery.setHighlightSimplePost("");// 后缀
QueryResponse queryResponse = solrServer.query(solrQuery);
这样就是设置成功了。
那如何处理高亮返回的结果呢?//获取高亮
Map>> highlightresult = queryResponse.getHighlighting();
//....
//在对查询到的结果进行遍历时,对是否存在高亮进行判断,如果存在,则进行实体类中属性值的替换。
for(...){
...
//获取文章id
int article_id=articlelist.get(i).getArticle_id();
//标题高亮
if (highlightresult.get(""+article_id+"") != null && highlightresult.get(""+article_id+"").get("article_title") != null) {
articlelist.get(i).setArticle_title(highlightresult.get(""+article_id+"").get("article_title").get(0));
}
//简介高亮
if (highlightresult.get(""+article_id+"") != null && highlightresult.get(""+article_id+"").get("article_summary") != null) {
articlelist.get(i).setArticle_summary(highlightresult.get(""+article_id+"").get("article_summary").get(0));
}
}
这样就完成了solr中高亮字段的显示功能,显示在页面上就是这个效果:
如何将solr查询结果封装成java bean实体类呢?
首先需要在需要封装的java bean(pojo)的属性上添加注解:@Field
我的article的java bean如下package impressive.bean;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import org.apache.solr.client.solrj.beans.Field;
/**
*
*
Title:Article
*
Description: 文章实体类
*
Company:www.inx.fun
* @author 时玉龙
* @date 2018年4月28日下午1:03:33
*/
public class Article implements Serializable{
//文章id
@Field
private int article_id;
//文章url
private String url;
//文章题图
private String avatar;
//文章标题
@Field
private String article_title;
//文章的简述
@Field
private String article_summary;
//文章内容
private String article_content;
//作者id
private int author_id;
//文章的发表时间
@Field
private Date article_datetime;
//文章的类型
private String category;
//文章的标签id
private String[] tags;
//文章评论数
@Field
private int comment_count;
//浏览量
@Field
private int visits;
//文章关键词
private String keywords;
public int getArticle_id() {
return article_id;
}
public void setArticle_id(int article_id) {
this.article_id = article_id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getArticle_title() {
return article_title;
}
public void setArticle_title(String article_title) {
this.article_title = article_title;
}
public String getArticle_summary() {
return article_summary;
}
public void setArticle_summary(String article_summary) {
this.article_summary = article_summary;
}
public String getArticle_content() {
return article_content;
}
public void setArticle_content(String article_content) {
this.article_content = article_content;
}
public int getAuthor_id() {
return author_id;
}
public void setAuthor_id(int author_id) {
this.author_id = author_id;
}
public Date getArticle_datetime() {
return article_datetime;
}
public void setArticle_datetime(Date article_datetime) {
this.article_datetime = article_datetime;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String[] getTags() {
return tags;
}
public void setTags(String[] tags) {
this.tags = tags;
}
public int getComment_count() {
return comment_count;
}
public void setComment_count(int comment_count) {
this.comment_count = comment_count;
}
public int getVisits() {
return visits;
}
public void setVisits(int visits) {
this.visits = visits;
}
public String getKeywords() {
return keywords;
}
public void setKeywords(String keywords) {
this.keywords = keywords;
}
}
一定要与你在solr的scheam.xml中设置的field一致才可以。
然后,我们就可以这样来处理solr查询结果了:QueryResponse queryResponse = solrServer.query(solrQuery);
//获取article文章实体类查询结果list
List articlelist=queryResponse.getBeans(ArticleCustom.class);