Java相关互联网技术首页投稿(暂停使用,暂停投稿)编程学习

探索 Apache Solr (2) - 使用SolrJ

2016-07-25  本文已影响1140人  简单的土豆

SolrJ是操作Solr官方提供的Java客户端,它底层使用HttpClient封装了大量的方法,使用它可以非常方便的对Solr索引进行增加、删除、修改、查询操作。

  1. 添加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));
    }

Paste_Image.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);
    }

Paste_Image.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

上一篇下一篇

猜你喜欢

热点阅读