Java Solr HTTPClient一般请求流程代码编写解析
小虾米
阅读:600
2021-03-31 13:46:59
评论:0
import com.alibaba.fastjson.JSONObject;
import com.digipower.common.page.PageData;
/**
* 查询的策略模式
* @author zzg
*
*/
public interface SearchStrategy<T> {
PageData<T> search(JSONObject json);
}
/**
* 文件级 solr 查询
* @author zzg
*
*/
public class SolrStrategy extends AbstractController implements SearchStrategy<Map> {
public static final Logger logger = LoggerFactory.getLogger(SolrStrategy.class);
private static final String solrCoreName ="fileInfo";
// slor 查询字段
private String[] fields;
// slor 查询结果是否高亮(默认false)
private boolean highlight = false;
public String[] getFields() {
return fields;
}
public void setFields(String[] fields) {
this.fields = fields;
}
public boolean isHighlight() {
return highlight;
}
public void setHighlight(boolean highlight) {
this.highlight = highlight;
}
public SolrStrategy(String[] fields, boolean highlight) {
super();
this.fields = fields;
this.highlight = highlight;
}
@Override
public PageData<Map> search(JSONObject json) {
// 分页请求参数
Map<String, Object> parame = JSONObject.toJavaObject(json, Map.class);
PageParam rb = super.initPageBounds(parame);
int start = (rb.getPageNo()-1);
int rows = rb.getLimit();
// 过滤字段
String[] fq = this.getFq(json);
HttpSolrClient solrClient = this.getCommonsHttpSolrServer(solrCoreName);
SolrQuery query = this.getCommonSolrQuery(fq, start, rows);
return this.getCommonPageData(solrClient, query);
return null;
}
public String[] getFq(JSONObject json){
// 移除分页请求参数
json.remove(WebAppConstants.PAGE);
json.remove(WebAppConstants.LIMIT);
json.remove("type");
List<String> list = new ArrayList<String>();
for(Object map: json.entrySet()){
String key = String.valueOf(((Map.Entry)map).getKey());
String value = String.valueOf(((Map.Entry)map).getValue());
if(!StringUtils.isEmpty(value)){
StringBuilder builder = new StringBuilder();
builder.append("text").append(":").append(value);
list.add(builder.toString());
}
}
//初始化需要得到的数组
String[] array = new String[list.size()];
//使用for循环得到数组
for(int i = 0; i < list.size();i++){
array[i] = list.get(i);
}
return array;
}
/**
* 构建solr 客户端
* @param solrCoreName
* @return
*/
protected HttpSolrClient getCommonsHttpSolrServer(String solrCoreName){
String solruri = ApplicationPropertiesHolder.getProperty("request.solr.uri", "");
solruri = solruri + solrCoreName + "/";
CloseableHttpClient httpClient = SpringContextUtil.getBean(CloseableHttpClient.class);
HttpSolrClient server = new HttpSolrClient(solruri,httpClient);
return server;
}
/**
* 构建solr 查询条件
* @param paramter
* @param start
* @param rows
* @return
*/
protected SolrQuery getCommonSolrQuery(String[] fq,Integer start, Integer rows){
SolrQuery query = new SolrQuery();
// 1、常用查询 q
query.setQuery("*:*");
// 2、过滤查询fq
query.setFilterQueries(fq);
// 3、设置查询字段
if(this.fields != null && this.fields.length > 0){
query.setFields(this.fields);
}
// 4、设置查询分页
query.setStart(start);
query.setRows(rows);
// 5、设置是否高亮
query.setHighlight(this.highlight);
return query;
}
protected PageData<Map> getCommonPageData(HttpSolrClient client, SolrQuery query){
PageData<Map> result =new PageData<Map>();
List<Map> list = new ArrayList<Map>();
try {
SolrDocumentList solrDocuments = client.query(query).getResults();
for(SolrDocument solrDocument : solrDocuments){
Map<String,Object> map = new HashMap<String,Object>();
for(int i= 0; i < this.fields.length; i++){
String key = this.fields[i];
Object object = solrDocument.get(key);
if(ObjectUtils.isEmpty(object)){
map.put(key, StringUtils.EMPTY);
} else {
map.put(key, object);
}
}
list.add(map);
}
long total = solrDocuments.getNumFound();
result.setData(list);
result.setPageNum(query.getStart());
result.setPageSize(query.getRows());
result.setTotalCount(total);
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error(e.getMessage());
return null;
}
return result;
}
}
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。