solrj的使用,环境准备,工程搭建,索引创建,添加\修改索引,删除索引,查询
1??????Solrj的使用
1.1?????什么是solrj
Solrj是訪問solr服務(wù)的java程序客戶端。
?
1.2?????需求
使用solrj調(diào)用solr服務(wù)實現(xiàn)對索引庫的增刪改查操作。
1.3?????環(huán)境準(zhǔn)備
l? Solr:4.10.3
l? Jdk環(huán)境:1.7.0_72(solr4.10 不能使用jdk1.7以下)
l? Ide環(huán)境:eclipse indigo
1.4?????工程搭建
1.4.1?? 第一步:創(chuàng)建java工程
1.4.2?? 第二步:添加jar
l? Solrj的包
如上圖:
solr-solrj-4.10.3.jar是solr的核心包
solrj-lib是solr的依賴包,若創(chuàng)建的是java工程,需要將solr-solrj-4.10.3.jar和solrj-lib中的包都添加到工程的lib包里面。
l? Solr服務(wù)的其它依賴包
1.5?????代碼實現(xiàn)
1.5.1?? 添加\修改索引
注意:在solr中添加和修改必須含有一個唯一主鍵,如果該主鍵已經(jīng)存在,則進行修改操作,否則就執(zhí)行添加操作
@Test ?? public void updateIndex() throws Exception { ????? // 創(chuàng)建HttpSolrServer,可以訪問solr服務(wù) ????? // 參數(shù)就是solr服務(wù)的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"); ? ????? // 執(zhí)行添加操作,如果該id存在,則進行修改 ????? server.add(doc); ? ????? // 提交 ????? server.commit(); ?? } |
?
1.5.2?? 刪除索引
@Test ?? public void deleteIndex() throws Exception { ????? // 創(chuàng)建HttpSolrServer,可以訪問solr服務(wù) ????? // 參數(shù)就是solr服務(wù)的url ????? HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr"); ? ????? // 根據(jù)id刪除 ????? // server.deleteById("8888"); ????? // 根據(jù)查詢條件刪除 ????? server.deleteByQuery("id:8888"); ????? // 全部刪除、慎用!!!! ????? // server.deleteByQuery("*:*"); ????? // 提交 ????? server.commit(); ?? } |
?
查詢
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 學(xué)習(xí)案例 ?* @author toto ?* @date 2017年3月12日 ?* @note begin modify by 修改人 修改時間? 修改內(nèi)容摘要說明 ?*/ public class IndexSearch { ??? ???????? @Test ???????? public void search() throws Exception { ?????????????????? //創(chuàng)建HttpSolrServer,可以訪問solr服務(wù) ?????????????????? //參數(shù)就是solr服務(wù)的url ?????????????????? HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr"); ?????????????????? ?????????????????? //創(chuàng)建solrQuery對象 ?????????????????? SolrQuery query = new SolrQuery(); ?????????????????? //設(shè)置q,查詢條件 ?????????????????? query.set("q", "product_name:小黃人"); ?????????????????? //設(shè)置fg,過濾查詢條件 ?????????????????? query.set("fq", "product_catalog_name:幽默雜貨"); ?????????????????? //設(shè)置sort,排序 ?????????????????? query.set("sort", "product_price desc"); ?????????????????? ?????????????????? //設(shè)置start,rows,分頁信息(寫上默認(rèn)值) ?????????????????? query.setStart(0); ?????????????????? query.setRows(10); ?????????????????? ?????????????????? //設(shè)置df ?????????????????? query.set("df", "product_keywords"); ?????????????????? ?????????????????? //設(shè)置高亮 ?????????????????? query.setHighlight(true); ?????????????????? query.addHighlightField("product_name"); ?????????????????? query.setHighlightSimplePre("<font style=\"color:red\">"); ?????????????????? query.setHighlightSimplePost("</font>"); ?????????????????? ?????????????????? //執(zhí)行搜索,并獲得返回值 ?????????????????? QueryResponse response = server.query(query); ?????????????????? ???????? ???????? //根據(jù)查詢條件匹配出的結(jié)果對象 ?????????????????? SolrDocumentList list = response.getResults(); ?????????????????? //匹配出的結(jié)果總數(shù) ?????????????????? long count = list.getNumFound(); ?????????????????? ?????????????????? System.out.println("匹配出的結(jié)構(gòu)總數(shù):" + 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)); ??????????????????????????? } ?????????????????? } ???????? } } |
?
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的solrj的使用,环境准备,工程搭建,索引创建,添加\修改索引,删除索引,查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.myql数据导入到solr,并建立s
- 下一篇: nginx开发从入门到精通 http: