solr IndexService

本文介绍了一个基于Apache Solr的索引管理服务实现,该服务提供了索引的增删改查功能,并支持针对不同站点的数据操作。文章详细展示了如何使用SolrServer进行索引的添加、更新、查询及删除等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.paic.wcm.search.admin.service;


import java.io.IOException;
import java.util.regex.Pattern;


import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import com.paic.wcm.search.admin.core.Config;
import com.paic.wcm.search.client.solrj.PaHttpSolrServer;
import com.paic.wcm.search.utils.DESUtil;


/**
 * 索引维护
 * 
 */
public class IndexService {


private static final Logger logger = LoggerFactory.getLogger(IndexService.class);


protected static PaHttpSolrServer server;

// 正则表达式
public static final String REGEX = "/c[123]/";

public IndexService() {
String password = Config.get().getProperty(Config.KEY_PA_AUTH);
try {
password = DESUtil.ecryptString(DESUtil.DEFAULT_SEED, password);
} catch (Exception e) {
logger.error(ExceptionUtils.getStackTrace(e));
}
server = new PaHttpSolrServer(Config.get().getProperty(Config.KEY_SEARCH_ADMIN_SERVER),password);
}


/**
* 新增、更新索引

* @param dto
* @return
*/
public boolean indexDoc(SolrInputDocument doc , String name) {


try {
if(name !=null && "site".equals(name)){
SolrServerManager.getServer().add(doc);
SolrServerManager.getServer().commit();
}
if(name !=null && "wap".equals(name)){
SolrServerManager.getWapServer().add(doc);
SolrServerManager.getWapServer().commit();
}
} catch (SolrServerException e) {
logger.error(ExceptionUtils.getStackTrace(e));
return false;
} catch (IOException e) {
logger.error(ExceptionUtils.getStackTrace(e));
return false;
}
return true;


}


/**
* 返回查询结果集

* @param link
* @param start
* @return
*/
public SolrDocumentList queryDocumentList(String link, int start , int rows,String name) {
if(link.contains("http:")) link = link.replaceAll("http:", "");
if(link.contains("https:")) link = link.replaceAll("https:", "");
SolrQuery params = null;
if(name != null && "wap".equals(name)){
params = new SolrQuery("link:*" + link + "*");
}
if(name != null && "site".equals(name)){
params = new SolrQuery("link:*" + link + "*" );
}
//SolrQuery params = new SolrQuery("link:*" + link + "*" );
params.setStart(start);
params.setRows(rows);
QueryResponse response = null;
try {
if(name != null && "wap".equals(name)){
response =  SolrServerManager.getWapServer().query(params);
}
if(name != null && "site".equals(name)){
response =  SolrServerManager.getServer().query(params);
}
return response.getResults();
} catch (SolrServerException e) {
logger.error(ExceptionUtils.getStackTrace(e));
return null;
}
}


/**
* 按链接查询单个结果

* @param link
* @param start
* @return
*/
public SolrDocument queryDocumentByLink(String link , String name) {
SolrQuery params = new SolrQuery("link:" + link);
QueryResponse response = null;
try {
if(name != null && "wap".equals(name)){
response =  SolrServerManager.getWapServer().query(params);
}
if(name != null && "site".equals(name)){
response =  SolrServerManager.getServer().query(params);
}
return response.getResults().get(0);
} catch (SolrServerException e) {
logger.error(ExceptionUtils.getStackTrace(e));
return null;
}
}

/**
* 按链接查询记录集

* @param link
* @param start
* @return
*/
public long getCountByLink(String link , String name) {
SolrQuery params = new SolrQuery("link:*" + link + "*");
QueryResponse response = null;
try {
if(name != null && "wap".equals(name)){
response =  SolrServerManager.getWapServer().query(params);
}
if(name != null && "site".equals(name)){
response =  SolrServerManager.getServer().query(params);
}
return (Long) response.getResults().getNumFound();
} catch (SolrServerException e) {
logger.error(ExceptionUtils.getStackTrace(e));
}
return 0;
}

/**
* 删除索引

* @param link
* @return
*/
public boolean deleteIndexByLink(String link , String name) {
try {
if(name != null && "wap".equals(name)){
SolrServerManager.getWapServer().deleteById(link);
SolrServerManager.getWapServer().commit();
}
if(name != null && "site".equals(name)){
SolrServerManager.getServer().deleteById(link);
SolrServerManager.getServer().commit();
}
} catch (SolrServerException e) {
logger.error(ExceptionUtils.getStackTrace(e));
return false;
} catch (IOException e) {
logger.error(ExceptionUtils.getStackTrace(e));
return false;
}
return true;
}


/**
* 批量删除索引

* @param link
* @return
*/
public boolean batchDeleteByLink(String link , String name) {
try {
if(name != null && "wap".equals(name)){
SolrServerManager.getWapServer().deleteById(link);
SolrServerManager.getWapServer().deleteByQuery("link:*" + link + "*");
SolrServerManager.getWapServer().commit();
}
if(name != null && "site".equals(name)){
SolrServerManager.getServer().deleteById(link);
SolrServerManager.getServer().deleteByQuery("link:*" + link + "*");
SolrServerManager.getServer().commit();
}
} catch (SolrServerException e) {
logger.error(ExceptionUtils.getStackTrace(e));
return false;
} catch (IOException e) {
logger.error(ExceptionUtils.getStackTrace(e));
return false;
}
return true;
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值