solr在java中的使用

学习solr的基础知识:http://blog.csdn.net/u012385190/article/details/51682380
参考文档:http://www.doc88.com/p-6763747939865.html

SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr索引的JAVA接口。SolrJ针对 Solr提供了Rest 的HTTP接口进行了封装, SolrJ底层是通过使用httpClient中的方法来完成Solr的操作。

jar包的引用(maven pom.xml):

 <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>5.3.1</version>
</dependency>
<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
</dependency>
<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
</dependency>
<dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
</dependency>

java代码:

package entity;

import java.io.IOException;
import java.util.List;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
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;


public class SolrJTest {
     //指定solr服务器的地址  
     private final static String SOLR_URL = "http://localhost:8080/solr/";  

     /**
      * 创建SolrServer对象
      * 
      * 该对象有两个可以使用,都是线程安全的  
      * 1、CommonsHttpSolrServer:启动web服务器使用的,通过http请求的 
      * 2、 EmbeddedSolrServer:内嵌式的,导入solr的jar包就可以使用了  
      * 3、solr 4.0之后好像添加了不少东西,其中CommonsHttpSolrServer这个类改名为HttpSolrClient
      * 
      * @return
      */
     public HttpSolrClient createSolrServer(){
         HttpSolrClient solr = null;
         solr = new HttpSolrClient(SOLR_URL);
         return solr;
     }


     /**
      * 往索引库添加文档
     * @throws IOException 
     * @throws SolrServerException 
      */
     public void addDoc() throws SolrServerException, IOException{
        //构造一篇文档  
         SolrInputDocument document = new SolrInputDocument();  
         //往doc中添加字段,在客户端这边添加的字段必须在服务端中有过定义  
         document.addField("id", "8");  
         document.addField("name", "周新星");  
         document.addField("description", "一个灰常牛逼的军事家");  
         //获得一个solr服务端的请求,去提交  ,选择具体的某一个solr core
        HttpSolrClient solr = new HttpSolrClient(SOLR_URL + "my_core");
        solr.add(document);
        solr.commit();
        solr.close();
     }


     /** 
      * 根据id从索引库删除文档 
      */
     public void deleteDocumentById() throws Exception {  
         //选择具体的某一个solr core
         HttpSolrClient server = new HttpSolrClient(SOLR_URL+"my_core");  
         //删除文档  
         server.deleteById("8");  
         //删除所有的索引
         //solr.deleteByQuery("*:*");
         //提交修改  
         server.commit();  
         server.close();
     }  

     /**
      * 查询
     * @throws Exception 
      */
     public void querySolr() throws Exception{
         HttpSolrClient solrServer = new HttpSolrClient(SOLR_URL+"my_core/");  
         SolrQuery query = new SolrQuery();  
         //下面设置solr查询参数
         //query.set("q", "*:*");// 参数q  查询所有   
         query.set("q","周星驰");//相关查询,比如某条数据某个字段含有周、星、驰三个字  将会查询出来 ,这个作用适用于联想查询

         //参数fq, 给query增加过滤查询条件  
         query.addFilterQuery("id:[0 TO 9]");//id为0-4  

         //给query增加布尔过滤条件  
         //query.addFilterQuery("description:演员");  //description字段中含有“演员”两字的数据

         //参数df,给query设置默认搜索域  
         query.set("df", "name");  

         //参数sort,设置返回结果的排序规则  
         query.setSort("id",SolrQuery.ORDER.desc);

         //设置分页参数  
         query.setStart(0);  
         query.setRows(10);//每一页多少值  

         //参数hl,设置高亮  
         query.setHighlight(true);  
         //设置高亮的字段  
         query.addHighlightField("name");  
         //设置高亮的样式  
         query.setHighlightSimplePre("<font color='red'>");  
         query.setHighlightSimplePost("</font>"); 

         //获取查询结果
         QueryResponse response = solrServer.query(query);  
         //两种结果获取:得到文档集合或者实体对象

         //查询得到文档的集合  
         SolrDocumentList solrDocumentList = response.getResults();  
         System.out.println("通过文档集合获取查询的结果"); 
         System.out.println("查询结果的总数量:" + solrDocumentList.getNumFound());  
         //遍历列表  
         for (SolrDocument doc : solrDocumentList) {
             System.out.println("id:"+doc.get("id")+"   name:"+doc.get("name")+"    description:"+doc.get("description"));
         } 

         //得到实体对象
         List<Person> tmpLists = response.getBeans(Person.class);
         if(tmpLists!=null && tmpLists.size()>0){
             System.out.println("通过文档集合获取查询的结果"); 
             for(Person per:tmpLists){
                 System.out.println("id:"+per.getId()+"   name:"+per.getName()+"    description:"+per.getDescription());
             }
         }
     }

     public static void main(String[] args) throws Exception {
         SolrJTest solr = new SolrJTest();
         //solr.createSolrServer();
         solr.addDoc();
         solr.deleteDocumentById();
         solr.querySolr();
    }
}
  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值