SolrJ是操作Solr官方提供的Java客户端,它底层使用HttpClient封装了大量的方法,使用它可以非常方便的对Solr索引进行增加、删除、修改、查询操作。
- 添加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.创建Model,上篇文章我们创建了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.创建演示类
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,切记。
}
//提交,关闭会话
@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));
}
![](https://img.haomeiwen.com/i1603753/8e3d0217396b35a2.png)
//添加多个用户
@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);
}
![](https://img.haomeiwen.com/i1603753/32b92c075a04f7cb.png)
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
}
//提交,关闭会话
@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 {
//构造查询参数
SolrQuery query = new SolrQuery("name:土豆*");//查询姓名包含土豆的User
query.set("fl", "id,name");//返回字段值,不返回则为null
query.setSort("age", SolrQuery.ORDER.asc);//按年龄升序
query.setHighlight(true); //开启高亮
query.setHighlightFragsize(10); //返回的字符个数
query.setHighlightRequireFieldMatch(true);
query.setHighlightSimplePre("<font color=\"red\">"); //前缀
query.setHighlightSimplePost("</font>"); //后缀
query.setParam("hl.fl", "name"); //高亮字段
query.setStart(0); //分页参数
query.setRows(10); //分页参数
//获得查询结果
QueryResponse response = solrClient.query(query);
//转换为Java Bean
List<User> userList = response.getBeans(User.class);
Assert.assertNotNull(userList);
Assert.assertTrue(userList.size() == 10);
}
}
是不是很简单?我想到这一步一般的使用场景已经可以对付了,只需把数据源换成数据库即可,相对复杂的操作可以阅读SolrJ API 文档。
本文是笔者刚接触Solr时写下的,如果你想更多的了解 Solr 及 Solr Cloud请阅读我的文集,那里更加完善 ->Solr&Solr Cloud
网友评论