solr java 查询高亮_solr学习(八):设置查询结果高亮及将查询结果封装成实体类对象...

运行tomcat,访问localhost:8080/solr

找到hl设置

267.html

进行下图的设置,就完成了高亮的设置:

267.html

然后我们搜一些自己能够搜索到的数据实例,就会发现底部会自动将查询的字段进行高亮显示

267.html

那在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中高亮字段的显示功能,显示在页面上就是这个效果:

267.html

如何将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);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值