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

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

        }

    }

}

 

你可能感兴趣的:(solrj)