探索 Apache Solr (2) - 使用SolrJ

SolrJ是操作Solr官方提供的Java客戶端臀稚,它底層使用HttpClient封裝了大量的方法疫粥,使用它可以非常方便的對Solr索引進(jìn)行增加、刪除故爵、修改玻粪、查詢操作。

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

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
    }

    //提交,關(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鉴竭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子岸浑,更是在濱河造成了極大的恐慌搏存,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矢洲,死亡現(xiàn)場離奇詭異璧眠,居然都是意外死亡,警方通過查閱死者的電腦和手機读虏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門责静,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盖桥,你說我怎么就攤上這事灾螃。” “怎么了揩徊?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵腰鬼,是天一觀的道長。 經(jīng)常有香客問我塑荒,道長熄赡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任齿税,我火速辦了婚禮彼硫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘偎窘。我一直安慰自己乌助,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布陌知。 她就那樣靜靜地躺著他托,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仆葡。 梳的紋絲不亂的頭發(fā)上赏参,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天志笼,我揣著相機與錄音,去河邊找鬼把篓。 笑死纫溃,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的韧掩。 我是一名探鬼主播紊浩,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疗锐!你這毒婦竟也來了坊谁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤滑臊,失蹤者是張志新(化名)和其女友劉穎口芍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雇卷,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鬓椭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了关划。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片小染。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贮折,靈堂內(nèi)的尸體忽然破棺而出氧映,到底是詐尸還是另有隱情,我是刑警寧澤脱货,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站律姨,受9級特大地震影響振峻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜择份,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一扣孟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荣赶,春花似錦凤价、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剩燥,卻和暖如春慢逾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工侣滩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留口注,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓君珠,卻偏偏與公主長得像寝志,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子策添,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容