solrj是通路solr服務的java程式用戶端。
使用solrj調用solr服務實作對索引庫的增删改查操作。
l solr:4.10.3
l jdk環境:1.7.0_72(solr4.10 不能使用jdk1.7以下)
l ide環境:eclipse indigo
l solrj的包
如上圖:
solr-solrj-4.10.3.jar是solr的核心包
solrj-lib是solr的依賴包,若建立的是java工程,需要将solr-solrj-4.10.3.jar和solrj-lib中的包都添加到工程的lib包裡面。
l solr服務的其它依賴包
注意:在solr中添加和修改必須含有一個唯一主鍵,如果該主鍵已經存在,則進行修改操作,否則就執行添加操作
@test
public void updateindex() throws exception {
// 建立httpsolrserver,可以通路solr服務
// 參數就是solr服務的url
httpsolrserver server = new httpsolrserver("http://localhost:8080/solr");
// solr的文檔對象
solrinputdocument doc = new solrinputdocument();
// 圖書資訊
doc.addfield("id", "8888");
doc.addfield("product_name", "solr程式設計思想");
doc.addfield("product_catalog", "99");
doc.addfield("product_catalog_name", "圖書");
doc.addfield("product_price", "8888.00");
// 執行添加操作,如果該id存在,則進行修改
server.add(doc);
// 送出
server.commit();
}
1.5.2 删除索引
public void deleteindex() throws exception {
// 根據id删除
// server.deletebyid("8888");
// 根據查詢條件删除
server.deletebyquery("id:8888");
// 全部删除、慎用!!!!
// server.deletebyquery("*:*");
查詢
package cn.com.hbny.solr;
import java.util.list;
import java.util.map;
import org.apache.solr.client.solrj.solrquery;
import org.apache.solr.client.solrj.impl.httpsolrserver;
import org.apache.solr.client.solrj.response.queryresponse;
import org.apache.solr.common.solrdocument;
import org.apache.solr.common.solrdocumentlist;
import org.junit.test;
/**
* @brief indexmanager.java
* @attention 學習案例
* @author toto
* @date 2017年3月12日
* @note begin modify by 修改人 修改時間 修改内容摘要說明
*/
public class indexsearch {
@test
public void search() throws exception {
//建立httpsolrserver,可以通路solr服務
//參數就是solr服務的url
httpsolrserver server = new httpsolrserver("http://localhost:8080/solr");
//建立solrquery對象
solrquery query = new solrquery();
//設定q,查詢條件
query.set("q", "product_name:小黃人");
//設定fg,過濾查詢條件
query.set("fq", "product_catalog_name:幽默雜貨");
//設定sort,排序
query.set("sort", "product_price desc");
//設定start,rows,分頁資訊(寫上預設值)
query.setstart(0);
query.setrows(10);
//設定df
query.set("df", "product_keywords");
//設定高亮
query.sethighlight(true);
query.addhighlightfield("product_name");
query.sethighlightsimplepre("<font style=\"color:red\">");
query.sethighlightsimplepost("</font>");
//執行搜尋,并獲得傳回值
queryresponse response = server.query(query);
//根據查詢條件比對出的結果對象
solrdocumentlist list = response.getresults();
//比對出的結果總數
long count = list.getnumfound();
system.out.println("比對出的結構總數:" + count);
//擷取高亮資訊
map<string, map<string, list<string>>> highlighting = response.gethighlighting();
for (solrdocument solrdocument : list) {
system.out.println("商品id:" + solrdocument.get("id"));
system.out.println("商品名稱:" + solrdocument.get("product_name"));
system.out.println("商品分類:" + solrdocument.get("product_catalog"));
system.out.println("商品分類名稱:"
+ solrdocument.get("product_catalog_name"));
system.out.println("商品價格:" + solrdocument.get("product_price"));
// system.out.println("商品描述:"+solrdocument.get("product_description"));
system.out.println("商品圖檔位址:" + solrdocument.get("product_picture"));
list<string> list2 = highlighting.get(solrdocument.get("id")).get("product_name");
if(list2!=null){
system.out.println("高亮後的資訊:"+list2.get(0));
}
}
}
}