服务器之家

服务器之家 > 正文

solr在java中的使用实例代码

时间:2020-11-25 10:53     来源/作者:俺就不起网名

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

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

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<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代码:

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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();
  }
}

参考文档:http://www.doc88.com/p-6763747939865.html

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

原文链接:http://blog.csdn.net/u012385190/article/details/53115546

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址 2020-08-12
最新idea2020注册码永久激活(激活到2100年)
最新idea2020注册码永久激活(激活到2100年) 2020-07-29
返回顶部