solr在java中的使用實(shí)例代碼
SolrJ是操作Solr的Java客戶端,它提供了增加、修改、刪除、查詢Solr索引的JAVA接口。SolrJ針對 Solr提供了Rest 的HTTP接口進(jìn)行了封裝, SolrJ底層是通過使用httpClient中的方法來完成Solr的操作。
jar包的引用(maven pom.xml):
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>5.3.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency>
java代碼:
package entity; import java.io.IOException; import java.util.List; 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.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; public class SolrJTest { //指定solr服務(wù)器的地址 private final static String SOLR_URL = "http://localhost:8080/solr/"; /** * 創(chuàng)建SolrServer對象 * * 該對象有兩個可以使用,都是線程安全的 * 1、CommonsHttpSolrServer:啟動web服務(wù)器使用的,通過http請求的 * 2、 EmbeddedSolrServer:內(nèi)嵌式的,導(dǎo)入solr的jar包就可以使用了 * 3、solr 4.0之后好像添加了不少東西,其中CommonsHttpSolrServer這個類改名為HttpSolrClient * * @return */ public HttpSolrClient createSolrServer(){ HttpSolrClient solr = null; solr = new HttpSolrClient(SOLR_URL); return solr; } /** * 往索引庫添加文檔 * @throws IOException * @throws SolrServerException */ public void addDoc() throws SolrServerException, IOException{ //構(gòu)造一篇文檔 SolrInputDocument document = new SolrInputDocument(); //往doc中添加字段,在客戶端這邊添加的字段必須在服務(wù)端中有過定義 document.addField("id", "8"); document.addField("name", "周新星"); document.addField("description", "一個灰常牛逼的軍事家"); //獲得一個solr服務(wù)端的請求,去提交 ,選擇具體的某一個solr core HttpSolrClient solr = new HttpSolrClient(SOLR_URL + "my_core"); solr.add(document); solr.commit(); solr.close(); } /** * 根據(jù)id從索引庫刪除文檔 */ public void deleteDocumentById() throws Exception { //選擇具體的某一個solr core HttpSolrClient server = new HttpSolrClient(SOLR_URL+"my_core"); //刪除文檔 server.deleteById("8"); //刪除所有的索引 //solr.deleteByQuery("*:*"); //提交修改 server.commit(); server.close(); } /** * 查詢 * @throws Exception */ public void querySolr() throws Exception{ HttpSolrClient solrServer = new HttpSolrClient(SOLR_URL+"my_core/"); SolrQuery query = new SolrQuery(); //下面設(shè)置solr查詢參數(shù) //query.set("q", "*:*");// 參數(shù)q 查詢所有 query.set("q","周星馳");//相關(guān)查詢,比如某條數(shù)據(jù)某個字段含有周、星、馳三個字 將會查詢出來 ,這個作用適用于聯(lián)想查詢 //參數(shù)fq, 給query增加過濾查詢條件 query.addFilterQuery("id:[0 TO 9]");//id為0-4 //給query增加布爾過濾條件 //query.addFilterQuery("description:演員"); //description字段中含有“演員”兩字的數(shù)據(jù) //參數(shù)df,給query設(shè)置默認(rèn)搜索域 query.set("df", "name"); //參數(shù)sort,設(shè)置返回結(jié)果的排序規(guī)則 query.setSort("id",SolrQuery.ORDER.desc); //設(shè)置分頁參數(shù) query.setStart(0); query.setRows(10);//每一頁多少值 //參數(shù)hl,設(shè)置高亮 query.setHighlight(true); //設(shè)置高亮的字段 query.addHighlightField("name"); //設(shè)置高亮的樣式 query.setHighlightSimplePre("<font color='red'>"); query.setHighlightSimplePost("</font>"); //獲取查詢結(jié)果 QueryResponse response = solrServer.query(query); //兩種結(jié)果獲?。旱玫轿臋n集合或者實(shí)體對象 //查詢得到文檔的集合 SolrDocumentList solrDocumentList = response.getResults(); System.out.println("通過文檔集合獲取查詢的結(jié)果"); System.out.println("查詢結(jié)果的總數(shù)量:" + solrDocumentList.getNumFound()); //遍歷列表 for (SolrDocument doc : solrDocumentList) { System.out.println("id:"+doc.get("id")+" name:"+doc.get("name")+" description:"+doc.get("description")); } //得到實(shí)體對象 List<Person> tmpLists = response.getBeans(Person.class); if(tmpLists!=null && tmpLists.size()>0){ System.out.println("通過文檔集合獲取查詢的結(jié)果"); for(Person per:tmpLists){ System.out.println("id:"+per.getId()+" name:"+per.getName()+" description:"+per.getDescription()); } } } public static void main(String[] args) throws Exception { SolrJTest solr = new SolrJTest(); //solr.createSolrServer(); solr.addDoc(); solr.deleteDocumentById(); solr.querySolr(); } }
參考文檔:http://www.doc88.com/p-6763747939865.html
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java經(jīng)驗點(diǎn)滴:處理沒有被捕獲的異常
Java經(jīng)驗點(diǎn)滴:處理沒有被捕獲的異常...2006-12-12Java基于WebMagic爬取某豆瓣電影評論的實(shí)現(xiàn)
這篇文章主要介紹了Java基于WebMagic爬取某豆瓣電影評論的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Java報錯:java.lang.UnsatisfiedLinkError問題的解決辦法
在Java開發(fā)中,java.lang.UnsatisfiedLinkError是一種與本地方法調(diào)用相關(guān)的常見異常,本文將詳細(xì)分析這一異常的背景、可能的原因、錯誤代碼示例、正確代碼示例,以及編寫代碼時需要注意的事項,需要的朋友可以參考下2024-09-09解決spring boot 1.5.4 配置多數(shù)據(jù)源的問題
下面小編就為大家?guī)硪黄鉀Qspring boot 1.5.4 配置多數(shù)據(jù)源的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06spring?Cloud微服務(wù)阿里開源TTL身份信息的線程間復(fù)用
這篇文章主要為大家介紹了spring?Cloud微服務(wù)中使用阿里開源TTL身份信息的線程間復(fù)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01