W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
SolrJ是一個使Java應(yīng)用程序可以輕松與Solr對話的API。SolrJ隱藏了許多連接到Solr的細(xì)節(jié),并允許您的應(yīng)用程序通過簡單的高級方法與Solr進(jìn)行交互。
SolrJ的中心是org.apache.solr.client.solrj包,它只包含五個主要的類。首先創(chuàng)建一個SolrClient代表你想要使用的Solr實(shí)例。然后發(fā)送SolrRequests或SolrQuerys找回SolrResponses。
SolrClient是抽象的,所以要連接到遠(yuǎn)程Solr的情況下,您將實(shí)際創(chuàng)建一個 HttpSolrClient 或 CloudSolrClient 的實(shí)例。兩者都通過HTTP與Solr進(jìn)行通信,不同之處在于HttpSolrClient使用明確的Solr URL進(jìn)行配置,而CloudSolrClient是使用 SolrCloud 群集的 zkHost 字符串配置的。
單節(jié)點(diǎn)Solr客戶端:
String urlString = "http://localhost:8983/solr/techproducts";
SolrClient solr = new HttpSolrClient.Builder(urlString).build();
SolrCloud客戶端:
// Using a ZK Host String
String zkHostString = "zkServerA:2181,zkServerB:2181,zkServerC:2181/solr";
SolrClient solr = new CloudSolrClient.Builder().withZkHost(zkHostString).build();
// Using already running Solr nodes
SolrClient solr = new CloudSolrClient.Builder().withSolrUrl("http://localhost:8983/solr").build();
一旦你有一個SolrClient,你可以通過調(diào)用類似的方法使用它,例如query(),add()以及commit()。
SolrJ API包含在Solr中,所以您不必下載或安裝其他任何東西。但是,為了構(gòu)建和運(yùn)行使用SolrJ的應(yīng)用程序,必須將一些庫添加到類路徑中。
在構(gòu)建時(shí),本節(jié)提供的示例要求在類路徑中使用solr-solrj-x.y.z.jar。
在運(yùn)行時(shí),本節(jié)中的示例需要在“dist / solrj-lib”目錄中找到的庫。
與這些部分的示例捆綁在一起的Ant腳本在構(gòu)建和運(yùn)行時(shí)適當(dāng)?shù)匕@些庫。
你可以通過使用Maven而不是Ant來避開大量的JAR文件。在應(yīng)用程序中包含 SolrJ 所需做的所有工作是將以下依賴項(xiàng)放在項(xiàng)目的 pom. xml 中:
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>x.y.z</version>
</dependency>
如果擔(dān)心SolrJ庫擴(kuò)展客戶端應(yīng)用程序的大小,則可以使用ProGuard之類的代碼混淆器來刪除不使用的API。
大多數(shù)SolrClient實(shí)現(xiàn)(例外情況:CloudSolrClient)要求用戶指定一個或多個Solr基本URL,然后客戶端將其用于向Solr發(fā)送HTTP請求。用戶在其提供的基本URL上包含的路徑會影響從此時(shí)創(chuàng)建的客戶端的行為。
SolrJ使用二進(jìn)制格式而不是XML作為默認(rèn)的響應(yīng)格式。如果您正在嘗試將 Solr 和 SolrJ 版本混合在一起,其中一個版本是1.x,另一個是3.x或更高版本,那么您必須使用XML響應(yīng)解析器。二進(jìn)制格式在3.x中改變,兩個javabin版本完全不兼容。以下代碼將進(jìn)行此更改:
solr.setParser(new XMLResponseParser());
使用query()有Solr的搜索結(jié)果。您必須傳遞一個描述查詢的SolrQuery對象,然后您將返回QueryResponse(從org.apache.solr.client.solrj.response包中)。
SolrQuery有一些方法可以方便地添加參數(shù)來選擇請求處理程序并向其發(fā)送參數(shù)。這是一個非常簡單的例子,它使用默認(rèn)的請求處理程序并設(shè)置查詢字符串:
SolrQuery query = new SolrQuery();
query.setQuery(mQueryString);
要選擇不同的請求處理程序,SolrJ 4.0及更高版本中提供了一個特定的方法:
query.setRequestHandler("/spellCheckCompRH");
您也可以在查詢對象上設(shè)置任意參數(shù)。下面的前兩行代碼相互等價(jià),第三行顯示如何使用任意參數(shù)q來設(shè)置查詢字符串:
query.set("fl", "category,title,price");
query.setFields("category", "title", "price");
query.set("q", "category:books");
完成SolrQuery設(shè)置后,請將其提交給query():
QueryResponse response = solr.query(query);
客戶端建立網(wǎng)絡(luò)連接并發(fā)送查詢。Solr處理查詢,并將響應(yīng)發(fā)送并解析為一個QueryResponse。
QueryResponse是一組滿足查詢參數(shù)的文檔。您可以使用 getResults () 直接檢索文檔,并且您可以調(diào)用其他方法來查找有關(guān)突出顯示或facet的信息。
SolrDocumentList list = response.getResults();
其他操作也很簡單。如果要索引(補(bǔ)充)的文件,所有你需要做的就是創(chuàng)建一個SolrInputDocument并將其傳遞到SolrClient的add()方法。這個例子假定已經(jīng)根據(jù)前面的例子創(chuàng)建了一個名為'solr'的SolrClient對象。
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "552199");
document.addField("name", "Gouda cheese wheel");
document.addField("price", "49.99");
UpdateResponse response = solr.add(document);
// Remember to commit your changes!
solr.commit();
SolrJ允許您以二進(jìn)制格式上傳內(nèi)容,而不是默認(rèn)的XML格式。使用以下代碼以二進(jìn)制格式上傳,這與SolrJ用于獲取結(jié)果的格式相同。如果您嘗試混合Solr和SolrJ版本,其中一個版本是1.x,另一個是3.x或更高版本,那么您必須使用XML請求編寫器。二進(jìn)制格式在3.x中改變,兩個javabin版本完全不兼容。
solr.setRequestWriter(new BinaryRequestWriter());
當(dāng)實(shí)現(xiàn)一次性批量加載大量文檔的Java應(yīng)用程序時(shí),可以考慮ConcurrentUpdateSolrClient替代使用HttpSolrClient。該ConcurrentUpdateSolrClient緩存所有添加的文檔,并將其寫入到打開的HTTP連接。這個類是線程安全的。盡管任何SolrClient請求都可以用這個實(shí)現(xiàn)來完成,但是建議只對ConcurrentUpdateSolrClientfor 使用/update請求。
本EmbeddedSolrServer類提供SolrClient客戶端API的實(shí)現(xiàn),它直接與在您的 Java 應(yīng)用程序中直接運(yùn)行的 Solr 的微實(shí)例進(jìn)行對話。這種嵌入式方法在大多數(shù)情況下不被推薦,并且在它所支持的一組功能上相當(dāng)有限 - 特別是它不能與SolrCloud或索引復(fù)制一起使用。EmbeddedSolrServer的存在主要是為了幫助促進(jìn)測試。
有關(guān)如何使用EmbeddedSolrServer的信息,請查看Solr源代碼版本的org.apache.solr.client.solrj.embedded包中的SolrJ JUnit測試。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: