探索 Apache Solr (2) - 使用SolrJ

作者: 简单的土豆 | 来源:发表于2016-07-25 19:28 被阅读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

    相关文章

      网友评论

        本文标题:探索 Apache Solr (2) - 使用SolrJ

        本文链接:https://www.haomeiwen.com/subject/uetnjttx.html