首页 > 代码库 > solr4使用solrj操作索引库

solr4使用solrj操作索引库

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@Repositorypublic 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();        }    }}

 

solr4使用solrj操作索引库