利用SolrJ操作solr API完成index操作
使用SolrJ操作Solr會比利用httpClient來操作Solr要簡單。SolrJ是封裝了httpClient方法,來操作solr的API的。SolrJ底層還是通過使用httpClient中的方法來完成Solr的操作。
1、 首先,你需要新增如下jar包
其中apache-solr-solrj-3.4.0.jar、slf4j-api-1.6.1.jar可以在下載的apache-solr-3.4.0的壓縮包中的dist中能找到。
2、 其次,建立一個簡單的測試類,完成Server物件的相關方法的測試工作,程式碼如下:
package com.hoo.test;
importjava.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
importorg.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.hoo.entity.Index;
/**
* <b>function:</b> Server TestCase
* @author hoojo
* @createDate 2011-10-19 下午01:49:07
* @file ServerTest.java
* @package com.hoo.test
* @project SolrExample
* @blog http://blog.csdn.net/IBM_hoojo
* @email [email protected]
* @version 1.0
*/
public class ServerTest {
private SolrServer server;
private CommonsHttpSolrServer httpServer;
private static final String DEFAULT_URL = "http://localhost:8983/solr/";
@Before
public void init() {
try {
server = new CommonsHttpSolrServer(DEFAULT_URL);
httpServer = new CommonsHttpSolrServer(DEFAULT_URL);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
@After
public void destory() {
server = null;
httpServer = null;
System.runFinalization();
System.gc();
}
public final void fail(Object o) {
System.out.println(o);
}
/**
* <b>function:</b> 測試是否建立server物件成功
* @author hoojo
* @createDate 2011-10-21 上午09:48:18
*/
@Test
public void server() {
fail(server);
fail(httpServer);
}
/**
* <b>function:</b> 根據query引數查詢索引
* @author hoojo
* @createDate 2011-10-21 上午10:06:39
* @param query
*/
public void query(String query) {
SolrParams params = new SolrQuery(query);
try {
QueryResponse response = server.query(params);
SolrDocumentList list = response.getResults();
for (int i = 0; i < list.size(); i++) {
fail(list.get(i));
}
} catch (SolrServerException e) {
e.printStackTrace();
}
}
}
測試執行server case方法,如果成功建立物件,那你就成功的連結到。
注意:在執行本方法之前,請啟動你的solr官方自動的專案。http://localhost:8983/solr/保證能夠成功訪問這個工程。因為接下來的所有工作都是圍繞這個solr工程完成的。如果你現在還不知道,怎麼部署、釋出官方solr工程,請參考前面的具體章節。
3、 Server的有關配置選項引數,server是CommonsHttpSolrServer的例項
server.setSoTimeout(1000); // socket read timeout
server.setConnectionTimeout(100);
server.setDefaultMaxConnectionsPerHost(100);
server.setMaxTotalConnections(100);
server.setFollowRedirects(false); // defaults to false
// allowCompression defaults to false.
// Server side must support gzip or deflate for this to have any effect.
server.setAllowCompression(true);
server.setMaxRetries(1); // defaults to 0. > 1 not recommended.
//sorlr J 目前使用二進位制的格式作為預設的格式。對於solr1.2的使用者通過顯示的設定才能使用XML格式。
server.setParser(new XMLResponseParser());
//二進位制流輸出格式
//server.setRequestWriter(new BinaryRequestWriter());
4、 利用SolrJ完成Index Document的新增操作
/**
* <b>function:</b> 新增doc文件
* @author hoojo
* @createDate 2011-10-21 上午09:49:10
*/
@Test
public void addDoc() {
//建立doc文件
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", 1);
doc.addField("name", "Solr Input Document");
doc.addField("manu", "this is SolrInputDocument content");
try {
//新增一個doc文件
UpdateResponse response = server.add(doc);
fail(server.commit());//commit後才儲存到索引庫
fail(response);
fail("query time:" + response.getQTime());
fail("Elapsed Time:" + response.getElapsedTime());
fail("status:" + response.getStatus());
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
query("name:solr");
}
在apache-solr-3.4.0\example\solr\conf目錄下的schema.xml中可以找到有關於field屬性的配置,schema.xml中的field就和上面Document文件中的field(id、name、manu)對應。如果出現ERROR:unknown field 'xxxx'就表示你設定的這個field在schema.xml中不存在。如果一定要使用這個field,請你在schema.xml中進行filed元素的配置。具體請參考前面的章節。
注意:在schema.xml中配置了uniqueKey為id,就表示id是唯一的。如果在新增Document的時候,id重複新增。那麼後面新增的相同id的doc會覆蓋前面的doc,類似於update更新操作,而不會出現重複的資料。
5、 利用SolrJ新增多個Document,即新增文件集合
/**
* <b>function:</b> 新增docs文件集合
* @author hoojo
* @createDate 2011-10-21 上午09:55:01
*/
@Test
public void addDocs() {
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", 2);
doc.addField("name", "Solr Input Documents 1");
doc.addField("manu", "this is SolrInputDocuments 1 content");
docs.add(doc);
doc = new SolrInputDocument();
doc.addField("id", 3);
doc.addField("name", "Solr Input Documents 2");
doc.addField("manu", "this is SolrInputDocuments 3 content");
docs.add(doc);
try {
//add docs
UpdateResponse response = server.add(docs);
//commit後才儲存到索引庫
fail(server.commit());
fail(response);
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
query("solr");
}
就是新增一個List集合
6、 新增JavaEntity Bean,這個需要先建立一個JavaBean,然後來完成新增操作;
JavaBean:Index的程式碼
package com.hoo.entity;
import org.apache.solr.client.solrj.beans.Field;
/**
* <b>function:</b> JavaEntity Bean;Index需要新增相關的Annotation註解,便於告訴solr哪些屬性參與到index中
* @author hoojo
* @createDate 2011-10-19 下午05:33:27
* @file Index.java
* @package com.hoo.entity
* @project SolrExample
* @blog http://blog.csdn.net/IBM_hoojo
* @email [email protected]
* @version 1.0
*/
public class Index {
//@Field setter方法上新增Annotation也是可以的
private String id;
@Field
private String name;
@Field
private String manu;
@Field
private String[] cat;
@Field
private String[] features;
@Field
private float price;
@Field
private int popularity;
@Field
private boolean inStock;
public String getId() {
return id;
}
@Field
public void setId(String id) {
this.id = id;
}
//getter、setter方法
public String toString() {
return this.id + "#" + this.name + "#" + this.manu + "#" + this.cat;
}
}
注意上面的屬性是和在apache-solr-3.4.0\example\solr\conf目錄下的schema.xml中可以找到有關於field屬性的配置對應的。如果你Index JavaBean中出現的屬性在schema.xml的field配置無法找到,那麼出出現unknown filed錯誤。
新增Bean完成doc新增操作
/**
* <b>function:</b> 新增JavaEntity Bean
* @author hoojo
* @createDate 2011-10-21 上午09:55:37
*/
@Test
public void addBean() {
//Index需要新增相關的Annotation註解,便於告訴solr哪些屬性參與到index中
Index index = new Index();
index.setId("4");
index.setName("add bean index");
index.setManu("index bean manu");
index.setCat(new String[] { "a1", "b2" });
try {
//新增Index Bean到索引庫
相關推薦
利用SolrJ操作solr API完成index操作
使用SolrJ操作Solr會比利用httpClient來操作Solr要簡單。SolrJ是封裝了httpClient方法,來操作solr的API的。SolrJ底層還是通過使用httpClient中的方法來完成Solr的操作。 1、 首先,你需要新增如下jar包 其
淘淘商城22_全文檢索_通過solrj對solr索引庫進行操作
百度網盤:jar包solrj 連結:https://pan.baidu.com/s/1HJ5M4YGyXj4AA3Enf6sDsA 提取碼:rqy9 步驟: 第一步:建立一個java工程 第二步:匯入jar包。包括solrJ的jar包 第三步
Activiti工作流框架學習(二)——使用Activiti提供的API完成流程操作
可以在專案中加入log4j,將logj4.properties檔案拷入到src目錄下,這樣框架執行的sql就可以輸出到到控制檯,log4j提供的日誌級別有以下幾種: Fatal error warn info debug trace 一、部署流程定義 1,在工程專
solrj操作solr索引庫(流程)
utf-8 except exception chcon tca hit lis gmv 添加 聲明:博主自己記錄以免忘記,所以無邏輯無參考價值。小女子就是醬紫任性 ---------首先dao層 訪問索引庫的類。定義一些通用的數據訪問方法。 業務邏輯就是查詢索引庫。 參數
Solr API操作
api solr 1、需要在/usr/local/services/solr/solr-4.10.3/example/solr/collection1/conf的solrconfig.xml加上 <requestHandler name="/select" class="solr.SearchH
solrj 操作 solr 集群版
pri ont zookeeper resp dso serve lec image solr 一、添加 @Test public void testAddDocument() throws Exception{ //創建一個集群的連接,應該使用 CloudSol
Java操作Solr之SolrJ
log mon print .com tin 方法 updater 服務 exce 添加SolrJ的jar包 solrj是訪問Solr服務的java客戶端,提供索引和搜索的請求方法,SolrJ通常在嵌入在業務系統中,通過SolrJ的API接口操作Solr服務,
@Modifying 註解完成修改操作
rem transacti runt ransac soft require spring base support 以上我們做的都是查詢,那要如何實現 修改、刪除和添加呢? 可以通過以下兩種方式: (1)通過實現 CrudRepository 接口來完成(以後介紹); (
利用PBFunc在Powerbuilder中進行FTP操作
sharp uil 服務器 builder not gin 方法 targe string PBFunc.dll包含了FTP的操作,使用FTP時主要需要以下步驟: 1.調用of_Login函數登錄Ftp服務器 2.調用FTP的各種方法 3.Ftp操作完畢後調用of_L
java selenium (九) 常見web UI 元素操作 及API使用
清空 radio send link checkbox list select ttext lba 鏈接(link) <div> <p>鏈接 link</p> <a href="www.cn
outlook2013打開鏈接“您的組織策略組織我們完成此操作”
您的組織策略組織我們完成此操作 outlook 問題描述: 客戶使用了思科郵件網關,郵件網關會根據規則自動識別一些垃圾郵件,並進行隔離,郵件隔離後會以郵件形式通知到郵箱,收件人可根據需要選擇是否放行,放行後郵件會到收件人郵箱。反正,則存在郵件網關的垃圾郵件隔離區中。 有部分收件人點擊放行,
Redis(三)Redis基本命令操作與API
最新 integer 朋友圈 shm ica 有序集合 object prop hashmap 一Redis 連接 Redis 連接命令主要是用於連接 redis 服務。 實例 以下實例演示了客戶端如何通過密碼驗證連接到 redis 服務,並檢測服務是否在運行: r
HDFS基本操作的API
clas hello iterator 調用方法 fsd for 副本 == and 一、從hdfs下載文件到windows本地: package com.css.hdfs01; import java.io.IOException; import java.net.U
Hibernate_day02---實體類操作、物件狀態、一級快取、事務操作、API
一、實體類編寫規則 1)實體類裡面屬性私有的 2)私有屬性使用公開的set和get方法操作 3)要求實體類有屬性作為唯一值(一般使用id值) 4)實體類屬性建議不使用基本資料型別,使用基本資料型別對應的包裝類 應用環境:可以解決區分出 值為零(score=0)和值不存在(
Java 8 集合之流式(Streams)操作, Streams API 詳解
因為當時公司的業務需要對集合進行各種各樣的業務邏輯操作,為了提高效能,就用到了這個東西,因為以往我們以前用集合都是需要去遍歷(序列),所以效率和效能都不是特別的好,而Streams就可以使用並行的方式來操作集合。 Stream 就如同一個迭代器(Iterator),單向,不可往復,資料只能遍歷一次,遍歷過一
利用c3p0的QueryRunner類封裝資料庫操作類
文章目錄 前言 1. 準備 2. 封裝資料庫連線 3. 使用QueryRunner類,實現對資料表的 insert delete update 4. 小結 前言 鑑於最近做一個小專案,想要自己封裝資料庫操作類,但是網上的各種
PHP如何利用Python實現對PDF檔案的操作
需求:在PHP裡實現了把8.pdf的前4頁pdf檔案截取出來生成新的pdf檔案。 詳細步驟如下: 前提:python必須是3.x版本以上,必要時需要升級pip3,命令如下:pip3 install --upgrade pipPyPDF 自 2010年 12月開始就不在更新了,PyPDF2 接棒 PyPD
pandas中的多級index操作
在pandas中可以為series和dataframe設定多個index,也就是說可以有多級index和column。這樣可以對pandas的操作更加靈活。 import numpy as np import pandas as pd from pandas import Serie
理解Path對路徑進行操作的API
閱讀目錄 一:理解normalize方法 二:理解join方法 三:理解dirname方法 四:理解basename方法 五:理解extname方法 回到頂部 一:理解normalize方法 該方法將非標準路徑字串轉換為標準路徑字串,在轉換過程中執行如
利用迅捷畫圖繪制精美流程圖操作方法介紹
元素 功能 基礎操作 什麽 背景 http 很多 成功 直接 流程圖在當下移動互聯網的發展中占據舉足輕重的地位,在工作學習中經常廣泛使用,那為什麽這麽受歡迎呢?雖然不能一味的模仿,但是具體操作流程框架可以更直觀的展示操作步驟,可以在基礎操作中對內容進行擴展也可以達到意想不