Spring Data Solr 查询方法
程序员文章站
2023-12-22 21:31:46
...
Spring Data Solr 查询方法
一丶普通关键字查询(代码)
Query query = new SimpleQuery();
//匹配查询条件
Criteria criteria = new Criteria();
//此处的is为匹配的意思,contains为包含
Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords"));
query.addCriteria(criteria);
query.setOffset(20);//开始索引(默认0)
query.setRows(20);//每页记录数(默认10)
ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
//获取该页的 内容
List<集合对象类型> list = page.getContent()
-
条件 Criteria可以针对多个域,使用方法criteria.and(“域名”).is/contain…都可对多个域进程匹配查询,需要注意的是每次都需要对criteria重新赋值才能起到查询的作用,例如:
Criteria criteria = new Criteria(); Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords")); // 此处必须重新赋值 criteria = criteria.and("item_name").is('需要匹配的字符串')
二丶过滤查询
-
原理:在query上边使用add()给他再此补充一个FilterQuery
FilterQuery filterQuery = new SimpleFilterQuery(); //这是过滤条件对应的域以及对应的过滤词 Criteria brandCriteria = new Criteria("item_brand").is(searchMap.get("brand")); //将过滤条件设置到过滤查询中 filterQuery.addCriteria(brandCriteria); //将过滤查询设置到查询query中 query.addFilterQuery(filterQuery);
- 可以针对多个域增加不同的过滤条件
-
对动态域的过滤查询,动态与一般在pojo中设置为对应的map集合,因此此处对map集合操作
//对动态域 Map<String, String> specMap = (Map<String, String>) searchMap.get("spec"); for (String key : specMap.keySet()) { FilterQuery filterQuery = new SimpleFilterQuery(); Criteria specCriteria = new Criteria("item_spec" +key).is(specMap.get(key)); filterQuery.addCriteria(specCriteria); query.addFilterQuery(filterQuery);
三丶高亮查询
-
代码:
//高亮查询 HighlightQuery query = new SimpleHighlightQuery(); //设置高亮选项 HighlightOptions highlightOptions = new HighlightOptions(); //设置高亮域 highlightOptions.addField("item_title"); //设置高亮前缀高亮后缀 highlightOptions.setSimplePrefix("<em style='color:red'>"); highlightOptions.setSimplePostfix("</em>"); //设置高亮选项 query.setHighlightOptions(highlightOptions); //********获取高亮结果集******** //高亮页对象 HighlightPage<TbItem> page = solrTemplate.queryForHighlightPage(query, TbItem.class); //高亮入口集合(每条记录的高亮入口) List<HighlightEntry<TbItem>> entryList = page.getHighlighted(); for (HighlightEntry<TbItem> entry : entryList) { //获取高亮列表(高亮域的个数) List<HighlightEntry.Highlight> highlightList = entry.getHighlights(); for (HighlightEntry.Highlight h : highlightList) { List<String> sns = h.getSnipplets();//每个域可能存取多值 for (String sn : sns) { TbItem item = entry.getEntity();//获取原,实体类 item.setTitle(sn); } } } //设置好之后获取内容 List<集合对象类型> list = page.getContent()
四丶分组查询
Query query = new SimpleQuery("*:*");
//按照关键字查询
Criteria criteria = new Criteria("item_keywords").is(searcpMap.get("keywords"));//where..
query.addCriteria(criteria);
//设置分组选项
GroupOptions groupOptions = new GroupOptions();
groupOptions.addGroupByField("item_category");//group by ....
query.setGroupOptions(groupOptions);
//得到分组页(一个分组页 包含多个分组结果)
GroupPage<TbItem> page = solrTemplate.queryForGroupPage(query, TbItem.class);
//根据列得到分组结果集 在设置分组选项时 可以设置很多的分组列 所以在一处应该根据列名称去挑选对应的分组列
GroupResult<TbItem> groupResult = page.getGroupResult("item_category");
//得到分组结果入口页 (可以得到具体的分组数据 这里是对象)
Page<GroupEntry<TbItem>> groupEntries = groupResult.getGroupEntries();
//得到分组入口集合(数据 这里是集合)
List<GroupEntry<TbItem>> content = groupEntries.getContent();
for (GroupEntry<TbItem> entry : content) {
//字符串为分组数据
String value = entry.getGroupValue()
}
- 此处一般将最后得到的分组数据字符串存入list,返回调用的地方。
- 注意的是:此处的page,getContent()得到的为null,此处做的是一个空实现。
推荐阅读
-
Spring Data Solr 查询方法
-
Spring-Boot 集成Solr客户端的详细步骤
-
Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页示例
-
springboot使用spring-data-jpa操作MySQL数据库
-
Spring Data JPA 实现多表关联查询的示例代码
-
Spring Data MongoDB中实现自定义级联的方法详解
-
Spring Data JPA+kkpager实现分页功能实例
-
EasyUi+Spring Data 实现按条件分页查询的实例代码
-
浅谈Spring Data如何简化数据操作的方法
-
Spring Data Jpa+SpringMVC+Jquery.pagination.js实现分页示例