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(); } }
参考文档:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。