五、SolrJ、Request Handler

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   io   os   使用   java   

什麼是SolrJ

既然Solr是以單獨的WebApp形式存在的,那麼Solr理應提供與Solr通訊的Api吧,對的,這就是SolrJ,既然與solr通訊是通過url,那麼其實我們也可以不用SolrJ,因為可以拼字串的嘛。

http://localhost:8983/solr/Artist/select?q=Artist_Name:周杰倫&wt=json&indent=true

這樣完全是可以的,但是用SolrJ來拼字串更方便而已,如果看到這裡,你就想用拼字串的方式,那麼將會很痛苦,因為SolrJ最大的好處就是解析返回的結果。如下:

 

{  "responseHeader":{    "status":0,    "QTime":2},  "response":{"numFound":1,"start":0,"docs":[      {        "Artist_NickName":"周杰倫",        "Artist_NameQP":"",        "Artist_IconNo":"0",        "Artist_MVNum":191,        "Artist_AuthDes":"",        "Artist_SpaceID":-1,        "Artist_Name":"周杰倫",        "Artist_Name_Exact":"周杰倫",        "Artist_CategoryID":"1415,1706",        "Artist_SongNum":847,        "Artist_Piclink2":"sod/artist/560/Z/周杰倫.jpg",        "Artist_MobilePic":"sod/artist/mobile/Z/周杰倫.jpg",        "Artist_ID":519,        "Artist_Piclink1":"sod/artist/14/03/1394692573546.jpg",        "Artist_PinYinInitial":"ZJL",        "_version_":1479005578890051584}]  }}

 

如果您非要自己解析…………..

 

SolrJ的使用Jar包

   1、 apache-solr-solrj-3.5.0.jar

     2、 commons-httpclient-3.1.jar

     3、slf4j-api-1.6.0.jar

     4、commons-logging-1.1.jar

 

串連Solr

 

HttpSolrServer solr = new HttpSolrServer(            PropertieFactory.getProperty("solr_Song_index_url"));SolrQuery songQuery = new SolrQuery();

 

 

 

其實就兩行代碼。其中url需要說明下,我用的是多索引庫,所以URL如下:

Localhost:8983/solr/索引庫名稱

這樣就能串連上了。

 

查詢

 

songQuery.setRows(searchParameters.getPageSize());      songQuery.setStart(searchParameters.getStarRecord());      songQuery.setFields("Song_SongID", "Song_Name", "Song_SingerName",            "Song_SpaceID", "Song_FilePic", "Song_FileMV", "Song_FileOL",            "Song_CategoryRelated", "Song_CreateTime",            "Song_ArtistRelated", "Song_UploadFlag", "Song_Quality",            "Song_Attribute", "Song_PlayNum", "Song_DownNum",            "Song_MVPlayNum","Song_ArtistID","Song_CategoryID");      songQuery.setQuery(searchParameters.getSong_Name());      songQuery.setFilterQueries("Song_Attribute:2");

 

 

上面這些都是在設定查詢參數,還有很多方法可以參看SolrJ wiki。

其實也可以不用查文檔,因為都可以使用如下的形式:

 

songQuery.set("","");

 

 

 

比如設定查詢的內容:

songQuery.set("q","Artist_Name:周杰倫")

 

q即為Url中的參數格式,所以也可以看到,SolrJ在查詢時,其實核心也就是在拼字串~~

簡單解釋一下幾個常用的設定,setRows和setStart是天然的分頁,可以設定返回多少行,從第多少個記錄返回。

SetFields是需要返回的Field

SetQuery就是設定查詢條件咯

SetFilterQueries就是設定過濾條件,比如上面的代碼,就只返回Song_Attribute為2的記錄。

 

解析搜尋結果

 

//查詢QueryResponse response = solr.query(songQuery);//總共查詢到的記錄數Long RecordNum = response.getResults().getNumFound();//查詢到的結果songList = response.getBeans(com.search.domain.Song.class);

 

 

這邊的精華就是Solr提供JavaBean接收返回結果。但是前提是需要一個Bean實體類。

 

@Fieldprivate Integer song_SongID;@Field標註需要注入的Field @Field("Song_SongID")   public void setSong_SongID(Integer song_SongID) {      this.song_SongID = song_SongID;   }

 

 

上一段代碼卸載Set方法中,用處就是如果你在Bean中不想使用和Solr索引庫中相同的Field名,可以用這個標註需要將Song_SongID注入到你自己命名的變數中。

需要注意的是,使用Bean接收,返回的是實體類的List。

 

SolrJ的使用是不是很簡單呢:),當然這隻是一些基本的使用。

 

 

Request Handlers

每個request handler都是由Name和實現的class定義的。通過url可以訪問對應的request handler。比如

http://localhost:8983/solr/collection1/select?q=solr

就會訪問name為select的request handler。

 

所以Request Handler的作用也就明了了,request handler可以統一配置對某索引庫的訪問,其實也類似於filter,對請求進行統一配置,進行預先處理,最典型的例子就是highlighting,可參見另一篇部落格:六、Solr高亮與Field權重

之所以和SolrJ放在一塊,就是因為Request Handler也可以配置一些共用的參數,如分頁時,每次查詢返回多少行,可以在name為Search的request handler裡面配置。這樣Solrj在訪問時,就不必每次單獨指定,還有比如DIH的配置。

其他很多handler的配置,可以參考文檔。

五、SolrJ、Request Handler

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.