日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[ solr入门 ] - 利用solrJ进行检索

發布時間:2024/4/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [ solr入门 ] - 利用solrJ进行检索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自: http://www.cnblogs.com/huangfox/archive/2012/02/13/2348949.html

solrJ可以看成是solr的java版客戶端,提供基本的索引維護、檢索等功能。

?

solrJ和solr服務端有兩種“溝通”方式:

第一,利用http進行通信。

第二,直接訪問solrCore(solr配置文件、索引文件等),不需要http通信(without http)。

solrJ的SolrServer類結構如下圖所示:

EmbeddedSolrServer是第二種方式,CommonsHttpSolrServer,LBHttpSolrServer是第一種方式,

其中LBHttpSolrServer是在CommonsHttpSolrServer的基礎上提供了負載均衡的功能(load Balanced)。

在很多應用場景下,我們基本都會選擇CommonsHttpSolrServer(LBHttpSolrServer)的方式。最近筆者有這樣一個 需求,在異構平臺上,有多種語言開發的系統都需要對基礎數據進行檢索,如果每個系統都針對性的開發一個客戶端,主要缺陷是緊耦合。因此筆者考慮在solr 的基礎上開發一套標準的webService接口發布服務,如果在solrCore的基礎上進行調整,調整量太大,如果借助solrJ的 CommonsHttpSolrServer與solrServer進行溝通,那么就會多走一次http。最后發現EmbeddedSolrServer 可以解決這個問題。

然后目前EmbeddedSolrServer也有一些問題需要處理,例如:multiCore、load Balanced等。

?

下面我們從檢索入手,初步了解solrJ的使用方法。

第一步:建立solrJ客戶端的“通訊員”(CommonsHttpSolrServer)

SolrServer server = new CommonsHttpSolrServer( url );

?

第二步:檢索

方式一:借助SolrRequestParsers解析“檢索字符串”進行檢索

public void query01(String queryString) { ????????SolrParams solrParams = SolrRequestParsers ????????????????.parseQueryString(queryString); ????????try { ????????????QueryResponse rsp = solr.query(solrParams); ????????????List<PatentBean> results = rsp.getBeans(PatentBean.class); ????????????for (PatentBean bean : results) ????????????????System.out.println(bean.toString()); ????????} catch (SolrServerException e) { ????????????e.printStackTrace(); ????????} ????}

queryString:String queryString = "q=ti:汽車&version=2.2&start=0&rows=10&indent=on";

這種方式簡單,但是在應用中通過拼接字符串是比較憋足的,所以這種方式應用較少。

注意:

List<PatentBean> results = rsp.getBeans(PatentBean.class);Bean這種方式,不管索引維護,還是檢索都十分方便。

?

方式二:借助ModifiableSolrParams對象接收查詢條件進行檢索

public void query02(String queryString) { ????????ModifiableSolrParams solrParams = new ModifiableSolrParams(); ????????solrParams.add("q", queryString); ????????solrParams.add("start", "0"); ????????solrParams.add("rows", "10"); ????????try { ????????????QueryResponse rsp = solr.query(solrParams); ????????????List<PatentBean> results = rsp.getBeans(PatentBean.class); ????????????for (PatentBean bean : results) ????????????????System.out.println(bean.toString()); ????????} catch (SolrServerException e) { ????????????e.printStackTrace(); ????????} ????}

這種方式和第一種類似,如果第一種方式用個StringBuilt接收參數,那么就沒什么兩樣了!?

?

方式三:借助solrQuery對象接收查詢條件進行檢索

public void query02(String queryString) { ????????SolrQuery query = new SolrQuery(); ????????query.setQuery(queryString); ????????query.setStart(0); ????????query.setRows(10); ????????QueryResponse rsp; ????????try { ????????????rsp = solr.query(query); ????????????List<PatentBean> results = rsp.getBeans(PatentBean.class); ????????????for (PatentBean bean : results) ????????????????System.out.println(bean.toString()); ????????} catch (SolrServerException e) { ????????????e.printStackTrace(); ????????} ????}

添加高亮效果:

query.setHighlight(true).setHighlightSnippets(1); query.setParam("hl.fl", "ti");

?

使用EmbeddedSolrServer進行檢索

創建EmbeddedSolrServer對象,如下:

private static CoreContainer.Initializer initializer = null; ????private static CoreContainer coreContainer = null; ????private static EmbeddedSolrServer server = null; ????static { ????????try { ????????????System.setProperty("solr.solr.home", "D:/solrHome/example/solr02"); ????????????initializer = new CoreContainer.Initializer(); ????????????coreContainer = initializer.initialize(); ????????????server = new EmbeddedSolrServer(coreContainer, ""); ????????} catch (Exception e) { ????????????e.printStackTrace(); ????????} ????}

?

?參考:

http://wiki.apache.org/solr/SolJava

http://wiki.apache.org/solr/Solrj

總結

以上是生活随笔為你收集整理的[ solr入门 ] - 利用solrJ进行检索的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。