solr配套有好多的客户端用于操作索引库,下面我们来讲如何用solrj去操作solr索引库。
一、认识solrj
solrj是solr的java客户端,用于访问solr索引库。它提供了添加、删除、查询、优化等功能。
二、下载
百度、google以下solrj下载,你会发现根本就没有,那么我们该到哪儿下载呢?其实,它是集成到solr压缩包里的,解压文件后,有个目录/dist/solrj-lib,里面就存放了solrj所用到的jar,你把这些jar都添加到你的classpath就ok。
如果你是使用Maven来构建项目,添加以下代码到你的pom.xml配置文件中:
<dependency> <artifactId>solr-solrj</artifactId> <groupId>org.apache.solr</groupId> <version>1.4.0</version> <type>jar</type> <scope>compile</scope> </dependency>
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.5.6</version> </dependency>
下面是具体使用Solr4j的工具类
package x.y.z; import java.io.IOException; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; import my.VirtualProxy; import org.apache.log4j.Logger; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.response.FacetField; import org.apache.solr.client.solrj.response.FacetField.Count; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import x.y.z.framework.search.vo.Content; import x.y.z.framework.search.vo.Search; //@Repository & @Autowired is use spring annotations @Repository public class SearchDAOImpl implements SearchDAO { private static Logger logger = Logger.getLogger(SearchDAOImpl.class); //@Autowired private HttpSolrServer solrServer; @Override public void init() { // TODO Auto-generated method stub String SearchService_Url = "http://localhost:8983/solr"; this.solrServer = new HttpSolrServer(SearchService_Url); try { solrServer.ping(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void init(String url) { // TODO Auto-generated method stub this.solrServer = new HttpSolrServer(url); try { solrServer.ping(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public boolean ping() { // TODO Auto-generated method stub try { if(this.solrServer != null) { this.solrServer.ping(); return true; } else { logger.debug("Manipulate null object.SolrServer must init."); return false; } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } } @Override public void addIndex(Content add) { // TODO Auto-generated method stub } @Override public void deleteIndex(Content delete) { // TODO Auto-generated method stub } @Override public void changeIndex(Content old_index, Content new_index) { // TODO Auto-generated method stub } @Override public Search query(String query, int start, int rows,String SortField, boolean Highlight) { // TODO Auto-generated method stub if(this.solrServer != null) { SolrQuery solrQuery = new SolrQuery(); solrQuery.setQuery(query); //start the query and show the rows number solrQuery.setStart(start); solrQuery.setRows(rows); //Sequence //Sequence for the asscet time and Weights for the sort result //the seq must not a null value solrQuery.addSortField(SortField, SolrQuery.ORDER.asc); //high light solrQuery.setHighlight(true); solrQuery.addHighlightField("name"); solrQuery.addHighlightField("id"); solrQuery.addHighlightField("title"); solrQuery.addHighlightField("features"); solrQuery.addHighlightField("content"); solrQuery.setHighlightSimplePre("<font color='red'>"); solrQuery.setHighlightSimplePost("</font>"); solrQuery.setHighlightSnippets(1);//结果分片数,默认为1 solrQuery.setHighlightFragsize(1000);//每个分片的最大长度,默认为100 solrQuery.setFacet(true).setFacetMinCount(1).setFacetLimit(5).addFacetField("id").addFacetField("inStock"); solrQuery.setFacet(true).setFacetMinCount(1).setFacetLimit(5).addFacetField("content").addFacetField("inStock"); QueryResponse queryResponse = null; try { queryResponse = solrServer.query(solrQuery); SolrDocumentList solrDocumentList = queryResponse.getResults(); return new Search(queryResponse,solrDocumentList); } catch (SolrServerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { logger.debug("The Search Server is null value."); } return null; } @Override public void close() { // TODO Auto-generated method stub if(this.solrServer != null) { this.solrServer.shutdown(); } else { logger.debug("Manipulate null object.SolrServer must init."); } } @Override public List<Content> queryAll() { // TODO Auto-generated method stub List<Content> list = new ArrayList<Content> (); if(this.solrServer != null) { SolrQuery solrQuery = new SolrQuery(); //String query = "GB"; String query = "*:*"; solrQuery.setQuery(query); //add the Integer start = 0; Integer rows = 20; solrQuery.setStart(start); solrQuery.setRows(rows); //Sequence //Sequence for the asscet time and Weights for the sort result //the seq must not a null value //solrQuery.addSortField("name", SolrQuery.ORDER.asc); solrQuery.addSortField("id", SolrQuery.ORDER.asc); //high light solrQuery.setHighlight(true); solrQuery.addHighlightField("name"); solrQuery.addHighlightField("id"); solrQuery.addHighlightField("title"); solrQuery.addHighlightField("features"); solrQuery.addHighlightField("content"); solrQuery.setParam("hl.fl", "content"); solrQuery.setHighlightSimplePre("<font color=\"red\">"); solrQuery.setHighlightSimplePost("</font>"); solrQuery.setFacet(true).setFacetMinCount(1).setFacetLimit(5).addFacetField("id"); solrQuery.setFacet(true).setFacetMinCount(1).setFacetLimit(5).addFacetField("content"); solrQuery.setFacet(true).setFacetMinCount(1).setFacetLimit(5).addFacetField("features"); try { QueryResponse queryResponse = solrServer.query(solrQuery); SolrDocumentList docs = queryResponse.getResults(); System.out.println("doc number found :" + docs.getNumFound()); System.out.println("doc max score :" + docs.getMaxScore()); for(SolrDocument doc : docs) { String name = (String) doc.getFieldValue("name"); String id = (String) doc.getFieldValue("id"); ArrayList features = (ArrayList)doc.getFieldValue("features"); //to add the list value must use the temp object Content vo = new Content(); //Set the vo object vo.setId(id); vo.setName(name); vo.setFeatures(features); list.add(vo); //Print the list value System.out.println("id :" + id); System.out.println("name :" + name); if(features != null) { for(Object feature : features.toArray()) { System.out.println("feature :" + feature.toString()); } } } } catch (SolrServerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { logger.debug("The Search Server is null value."); } return list; } @Override public int queryTotal(String query) { // TODO Auto-generated method stub if(this.solrServer != null) { SolrQuery solrQuery = new SolrQuery(); solrQuery.setQuery(query); QueryResponse queryResponse; try { queryResponse = solrServer.query(solrQuery); return queryResponse.getResults().size(); } catch (SolrServerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return 0; } /* * (non-Javadoc) * @Warning it will clear ALL the index * @see com.cfp.framework.search.dao.SearchDAO#clearAll() */ @Override public void clearAll() { // TODO Auto-generated method stub try { solrServer.deleteByQuery("*:*"); solrServer.commit(); } catch (SolrServerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }