Solr 后台查询实例 (工作备查)
有时间再进行整理
package xxx.service.impl; import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry; import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate; import com.google.common.base.Joiner;
import xxx.config.ApplicationProperties;
import xxx.dbmodel.Copyright;
import xxx.repository.generic.CopyrightGenericRepository;
import xxx.service.CopyrightService;
import xxx.web.rest.util.StringUtil;
@Service
@Transactional
public class CopyrightServiceImpl implements CopyrightService {
private static final Logger log = Logger.getLogger(CopyrightServiceImpl.class); @Autowired
private ApplicationProperties applicationProperties; @Autowired
private CopyrightGenericRepository copyrightGenericTRepository; @Qualifier("solrRestTemplate")
@Autowired
private RestTemplate restTemplate; @Override
public Copyright getOneById(String id) {
return copyrightGenericTRepository.getOneById(id);
} @Override
public String getPageFromSolr(Copyright copyright, int page, int rows,
String sidx, String sord) {
//查询参数Map
Map<String, Object> paramsMap = new HashMap<>();
Map<String, String> copyrightFields = new HashMap<>();
try {
copyrightFields = BeanUtils.describe(copyright);
} catch (Exception e) {
log.info("search parms is error in CopyrightFieldsServiceImpl!", e);
}
for (Entry<String,String> field : copyrightFields.entrySet()) {
String key = field.getKey();
String value = field.getValue();
if(StringUtil.isNullStr(value) || "class".equals(key)){
continue;
}
if(key.endsWith("Id")){
paramsMap.put(key, value);
}else{
paramsMap.put(key, "*"+value+"*");
}
}
//指定查询表名
paramsMap.put("searchType", "CopyrightMG");
if(copyright.getBeginTime() != null){
paramsMap.put("beginTime","["+copyright.getBeginTime()+" TO * ]");
}
if(copyright.getEndTime() != null){
paramsMap.put("endTime","[ * TO "+copyright.getEndTime()+" ]");
}
//查询条件Map
Map<String, Object> queryMap = setQueryMap(paramsMap, page, rows, sidx, sord);
//solr查询
return restTemplate.postForObject(applicationProperties.getStorage().getSorlUrl(), queryMap, String.class);
} private Map<String, Object> setQueryMap(Map<String, Object> paramsMap, int page, int rows, String sidx, String sord){
Map<String, Object> query = new HashMap<>();
String paramStr = Joiner.on(",").withKeyValueSeparator(":").join(paramsMap);
query.put("filterQueries", paramStr);
query.put("query", "*:*");
query.put("start", (page-1)*rows);//开始位置
query.put("rows", rows);//查询条数
String sort = "copyrightId desc";
if(!StringUtil.isNullStr(sidx)){
sort = sidx + " " + sord;
}
query.put("sort", sort);
//指定查询数媒集合
query.put("collection", applicationProperties.getStorage().getSorlIndexLibrary());
query.put("returnType", "1");
return query;
} @Override
public Long count() {
return copyrightGenericTRepository.count();
}
}
Solr 后台查询实例 (工作备查)的更多相关文章
- solr 查询 实例分析
solr索引查询接口:http://localhost:8080/solr/query 首先了解一下查询参数的含义. q Solr 中用来搜索的查询.可以通过追加一个分号和已索引且未进行断词的字段(下 ...
- 【MySQL】分页查询实例讲解
MySQL分页查询实例讲解 1. 前言 本文描述了团队在工作中遇到的一个MySQL分页查询问题,顺带讲解相关知识点,为后来者鉴.本文的重点不是"怎样"优化表结构和SQL语句,而是探 ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)
使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...
- (24)ASP.NET Core EF查询(查询的工作原理、跟踪与非跟踪查询)
1.查询生命周期 在进入正题时候,我们先来了解EF Core查询的生命周期. 1.1LINQ查询会由Entity Framework Core处理并生成给数据库提供程序可处理的表示形式(说白了就是生成 ...
- solr后台操作Documents之增删改查
偶尔会用到solr后台操作一些数据,比如测试等一些情况.但具体用的时候可能会忘记,或者搜的时候结果不全,在此略详细的记一下. 1.添加 {"id":6,"title&qu ...
- Solr 排除查询
前言 solr排除查询也就是我们在数据库和程序中经常处理的不等于,solr的语法是在定语前加[-].. StringBuilder sbHtml=new StringBuilder(); shBhtm ...
- 【solr】之solr界面查询返回距离并排序
使用solr界面查询 {!geofilt}距离函数 star:[4 TO 5]星级排序 geodist() desc 距离排序 pt :31.221717,121.580891 sfield:loca ...
- 【转】Solr客户端查询参数总结
今天还是不会涉及到.Net和数据库操作,主要还是总结Solr 的查询参数,还是那句话,只有先明白了solr的基础内容和查询语法,后续学习solr 的C#和数据库操作,都是水到渠成的事.这里先列出sol ...
- iOS开发之数据存取2-CoreData后台查询数据
注意:本人所讲的后台查询必须在使用CoreData时选择存储类型为“SQLite”,因为二进制或者XML存储方式会在打开的时候直接读到内存中. 1.CoreData数据后台查询出现的情况 CoreDa ...
随机推荐
- 阿里云rds实例恢复到本地
摘要: 前提: 1,阿里云数据库备份实例,恢复数据的时候需要将数据恢复到本地数据库,是不能直接恢复到RDS上的. 2,需要在本地服务器上下载一个数据库,尽量和RDS数据库版本保持一致.(我现在用的是5 ...
- vs 2012/2013 等工具中,使用正则表达式,查找、替换
有这样一个需求,就是一个文本中,需要找出指定格式的字符串进行指定的替换,当前我的真实需求是,一个sql创建触发器的文本,我需要将所有的 包含 TB_SYS 的表名后面添加一个 “_NEW”字符串! 例 ...
- DevExpress11、TreeList
一.简介 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...
- spark任务调度和资源分配
Spark调度模式 FIFO和FAIR Spark中的调度模式主要有两种:FIFO和FAIR. 默认情况下Spark的调度模式是FIFO(先进先出),谁先提交谁先执行,后面的任务需要等待 ...
- [python] 在 python2和3中关于类继承的 super方法简要说明
下面举一个例子,同样的代码使用 python2 和 python3 写的,大家注意两段程序中红色加粗的部分: python2的类继承使用super方法: #-*- coding:utf-8 -*- ' ...
- 【Ansible 文档】【译文】动态inventory
Dynamic Inventory 动态inventory 配置管理系统的用户经常想要保存inventory到不同的软件系统中.Ansible提供了一个基本的基于文本的系统,正如inventory中描 ...
- MySQL备份与恢复.md
备份与恢复使用的命令 mysqldump 常用选项 -A, --all-databases:导出全部数据库 -B, --databases:导出几个数据库.参数后面所有名字参量都被看作数据库名. -- ...
- Android--------TabLayout实现新闻客户端顶部导航栏
APP市场中大多数新闻App都有导航菜单,导航菜单是一组标签的集合,在新闻客户端中,每个标签标示一个新闻类别,对应下面ViewPager控件的一个分页面,今日头条, 网易新闻等. 随着版本迭代的更新, ...
- C#创建无窗体的应用程序
示例程序 这是初学C#时困惑了很久才解决的问题,突然想起来拿出来和大家分享. 当初我是这样做的: 1. 在窗体初始化时(构造函数里面),添加一句This.Visible = false; 2 ...
- 物理standby database的日常维护
1.停止Standby select process, status from v$managed_standby; --查看备库是否在应用日志进行恢复 alter database recover ...