SolrJ是操作Solr官方提供的Java客戶端臀稚,它底層使用HttpClient封裝了大量的方法疫粥,使用它可以非常方便的對Solr索引進(jìn)行增加、刪除故爵、修改玻粪、查詢操作。
- 添加Maven依賴
<!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>5.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
2.創(chuàng)建Model诬垂,上篇文章我們創(chuàng)建了user_core劲室,并且擁有id、name结窘、age字段很洋,與其保持一致。
public class User {
@Field("id")
private String id;
@Field("name")
private String name;
@Field("age")
private Integer age;
//省略geter隧枫、setter
}
3.創(chuàng)建演示類
public class SolrJExample {
private HttpSolrClient solrClient;
//初始化客戶端
@Before
public void before() {
solrClient = new HttpSolrClient("http://127.0.0.1:8080/solr/user_core");
//由于目前只有一個Core喉磁,就直接寫在url上拉,這里不寫的話CRUD操作前都要聲明被操作的Core官脓,切記协怒。
}
//提交,關(guān)閉會話
@After
public void after() throws IOException, SolrServerException {
solrClient.commit();
solrClient.close();
}
}
4.添加索引
//添加一個用戶
@Test
public void addOne() throws IOException, SolrServerException {
solrClient.addBean(new User("2", "張三", 48));
}
//添加多個用戶
@Test
public void addList() throws IOException, SolrServerException {
int i = 1;
int max = 100;
List<User> userList = new ArrayList<User>(max);
while (i <= max) {
userList.add(new User(String.valueOf(i), "土豆-" + i, i));
i++;
}
solrClient.addBeans(userList);
}
5.刪除卑笨、查詢及類完整代碼
package cn.potato.solr;
import cn.potato.solr.model.User;
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.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by 土豆 on 2016/7/25.
*/
public class SolrJExample {
private HttpSolrClient solrClient;
//初始化客戶端
@Before
public void before() {
solrClient = new HttpSolrClient("http://127.0.0.1:8080/solr/user_core");//由于目前只有一個Core孕暇,就直接卸載url上拉,不然CRUD操作前都要聲明被操作的Core
}
//提交,關(guān)閉會話
@After
public void after() throws IOException, SolrServerException {
solrClient.commit();
solrClient.close();
}
//添加一個用戶
@Test
public void addOne() throws IOException, SolrServerException {
solrClient.addBean(new User("2", "張三", 48));
}
//添加多個用戶
@Test
public void addList() throws IOException, SolrServerException {
int i = 1;
int max = 100;
List<User> userList = new ArrayList<User>(100);
while (i <= max) {
userList.add(new User(String.valueOf(i), "土豆-" + i, i));
i++;
}
solrClient.addBeans(userList);
}
@Test
public void delete() throws IOException, SolrServerException {
solrClient.deleteById("1");//刪除一個
solrClient.deleteByQuery("*:*");//刪除所有
}
@Test
public void query() throws IOException, SolrServerException {
//構(gòu)造查詢參數(shù)
SolrQuery query = new SolrQuery("name:土豆*");//查詢姓名包含土豆的User
query.set("fl", "id,name");//返回字段值妖滔,不返回則為null
query.setSort("age", SolrQuery.ORDER.asc);//按年齡升序
query.setHighlight(true); //開啟高亮
query.setHighlightFragsize(10); //返回的字符個數(shù)
query.setHighlightRequireFieldMatch(true);
query.setHighlightSimplePre("<font color=\"red\">"); //前綴
query.setHighlightSimplePost("</font>"); //后綴
query.setParam("hl.fl", "name"); //高亮字段
query.setStart(0); //分頁參數(shù)
query.setRows(10); //分頁參數(shù)
//獲得查詢結(jié)果
QueryResponse response = solrClient.query(query);
//轉(zhuǎn)換為Java Bean
List<User> userList = response.getBeans(User.class);
Assert.assertNotNull(userList);
Assert.assertTrue(userList.size() == 10);
}
}
是不是很簡單隧哮?我想到這一步一般的使用場景已經(jīng)可以對付了,只需把數(shù)據(jù)源換成數(shù)據(jù)庫即可铛楣,相對復(fù)雜的操作可以閱讀SolrJ API 文檔近迁。
本文是筆者剛接觸Solr時寫下的,如果你想更多的了解 Solr 及 Solr Cloud請閱讀我的文集簸州,那里更加完善 ->Solr&Solr Cloud