SpringBoot集成Solr(二)搜索数据

SpringBoot集成Solr(二)搜索数据

1.1 构建查询条件

//创建 solr查询参数对象
SolrQuery query = new SolrQuery();
StringBuilder params = new StringBuilder();
params.append(" subject_s:*").append(text).append("*");
params.append(" OR keywords_s:*").append(text).append("*");
params.append(" OR summary_ik:*").append(text).append("*");
params.append(" OR content_ik:*").append(text).append("*");
params.append(" OR creationByName_s:*").append(text).append("*");
query.setQuery(params.toString());

  • 上面代码中左边的字符串是映射到solr中的实体属性,相当于数据库中的表字段,*表示匹配多位。

1.2 构建排序条件

//多个条件 构造方式
List<SolrQuery.SortClause> orders = new ArrayList<>();
orders.add(new SolrQuery.SortClause("topFlag_s", SolrQuery.ORDER.asc));
orders.add(new SolrQuery.SortClause("creationDate_s", SolrQuery.ORDER.desc));
query.setSorts(orders);

//单个条件构造方式一
SortClause sort = new SolrQuery.SortClause("topFlag_s", SolrQuery.ORDER.asc)
query.setSort(sort);

//单个条件构造方式二
query.setSort("topFlag_s",SolrQuery.ORDER.asc);

1.3 设置分页

//设置分页
query.setStart(Func.toInt(page.getCurrent() - 1)); //solr的分页是从0开始的
query.setRows(Func.toInt(page.getSize()));
  • 注意:solr的分页第一页其实是从0开始的,部分框架中分页插件第一页是从1开始的

1.4 设置高亮

//启动高亮显示 
query.setHighlight(true);
//指定需要高亮显示的属性
query.addHighlightField("subject_s");
query.addHighlightField("keywords_s");
query.addHighlightField("kmCategoryName_s");
//高亮显示的前缀
query.setHighlightSimplePre("<font color='red'>");
//高亮显示的后缀
query.setHighlightSimplePost("</font>");
  • 注意:这种方式设置的高亮是整个属性值全部高亮。

  • 例如:设置标题高亮

    在这里插入图片描述

  • 若想只高亮输入的关键字,则可以使用如下方式实现:
//在源字符串中匹配关键字,并指定关键字颜色、背景
public static String markSubstring(String original, String keyword) {
		Pattern pattern = Pattern.compile(keyword, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(original);
		return matcher.replaceAll("<font style='background-color:#ffff00;color:#f00'>$0</font>");
}

1.5 执行查询

//执行查询
QueryResponse response = solrClient.query(query);
//检索到的数量
long numFound = response.getResults().getNumFound();
//处理文档
SolrDocumentList solrDocumentList = response.getResults();
// 初始化 DocumentObjectBinder对象
DocumentObjectBinder binder = new DocumentObjectBinder();
// 将查询结果 solrDocumentList对象转换为list对象
result = binder.getBeans(KnowledgeIk.class, solrDocumentList);
return result;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值