solr在java中的使用

solr在java中的使用

原创 2016年11月10日 14:40:09



  • 学习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>
        
        
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    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();
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值