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("");
//高亮显示的后缀
query.setHighlightSimplePost("");
  • 注意:这种方式设置的高亮是整个属性值全部高亮。

  • 例如:设置标题高亮

    SpringBoot集成Solr(二)搜索数据_第1张图片

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

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;

你可能感兴趣的:(实践是检验真理的唯一标准,spring,boot,solr,后端)