欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

solr在java中的使用实例代码

程序员文章站 2023-12-04 15:10:04
solrj是操作solr的java客户端,它提供了增加、修改、删除、查询solr索引的java接口。solrj针对 solr提供了rest 的http接口进行了封装, so...

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

参考文档:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。