1. 程式人生 > >七、通過java程式碼實現增量、全量索引

七、通過java程式碼實現增量、全量索引

      前期對solr全文檢索已經做了絕大部分的工作,現在剩下的就是如何讓索引自動載入,包括全量載入及增量載入。

1.首先要實現自動的全量載入及增量載入就要通過定時任務來實現,這裡定時任務的編寫不在這裡描述。

2.如下是我在專案中的全量、增量載入的程式碼:

package com.ultrapower.bpm.interfaces;

import java.io.IOException;
import java.util.Properties;

import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Logger;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
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;
import org.springframework.core.io.support.PropertiesLoaderUtils;

import com.ultrapower.bpm.process.action.ProcessAction;
import com.ultrapower.bpm.sheet.manage.PreemptiveAuthInterceptor;

public class AddSolrOperator {
	//======================================讀取配置檔案中solr的URL
	public static String SOLR_URL = "";
	public static String SOLR_IP = "";
	public static String SOLR_PORT = "";
	private static Logger log = Logger.getLogger(ProcessAction.class);
	
	static{
		try {
			Properties properties = PropertiesLoaderUtils.loadAllProperties("solrURL.properties");
			SOLR_URL = properties.getProperty("solr.url");
			SOLR_IP = properties.getProperty("solr.ip");
			SOLR_PORT = properties.getProperty("solr.port");
		} catch (IOException e) {
			log.error("讀取solrURL.properties出現異常!!", e);
		}
	}
	
	//======================================
	
	
	
	// private static final String DEFAULT_URL = "http://localhost:8088/solr/";
	 
	// http://localhost:8088/solr/collection1/dataimport?command=delta-import&clean=false&commit=true&entity=up_knowledge&optimize=false
	 // http://localhost:8088/solr/collection1/dataimport?command=delta-import&clean=false&commit=true&optimize=false
	 public static HttpSolrServer solr=null ;
	 
	 @SuppressWarnings("unchecked")
	public synchronized void scanInterface() throws IOException{
		 solr= new HttpSolrServer(SOLR_URL);
			//====進行使用者驗證,因為tomcat中設定了使用者驗證,所以為了能連線伺服器必需要驗證使用者,否則不能連通伺服器
			 DefaultHttpClient m_client =(DefaultHttpClient)solr.getHttpClient(); 
			  UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("admin","admin");
			  m_client.addRequestInterceptor(new PreemptiveAuthInterceptor(),0);
			  (((DefaultHttpClient)m_client).getCredentialsProvider()).setCredentials(new AuthScope(SOLR_IP,Integer.parseInt(SOLR_PORT)), credentials);
	        //======
//			  AddSolrOperator add=new AddSolrOperator();
			  buildIndex(false);
	     SolrInputDocument doc = new SolrInputDocument();
	     try {
		  } catch (Exception e) {
			  e.printStackTrace();
		  }
	}
	 
	 
	 /**
	     * 增量/全量建立索引 。
	     * 
	     * @param delta false,增量建立索引;true,重建所有索引
	 * @throws IOException 
	     */
	    public static void buildIndex(boolean delta) throws IOException {
	        SolrQuery query = new SolrQuery();
	        // 指定RequestHandler,預設使用/select
	        query.setRequestHandler("/dataimport");

	        String command = delta ? "full-import" : "delta-import"; 
	        String clean = delta ? "true" : "false";
	        String optimize = delta ? "true" : "false";
	        
	        query.setParam("command", command)
	             .setParam("clean", false)
	             .setParam("commit", "true")
//	             .setParam("entity", "")
	             .setParam("optimize", optimize);
	        try {
	        	solr.query(query);
	        	solr.commit();
	        	System.out.println(" ///////////"+command);
	        } catch (SolrServerException e) {
	           e.printStackTrace();
	        }
	    }
}

相關推薦

通過java程式碼實現增量索引

      前期對solr全文檢索已經做了絕大部分的工作,現在剩下的就是如何讓索引自動載入,包括全量載入及增量載入。 1.首先要實現自動的全量載入及增量載入就要通過定時任務來實現,這裡定時任務的編寫不在這裡描述。 2.如下是我在專案中的全量、增量載入的程式碼: packag

hadoop入門之通過java程式碼實現將本地檔案上傳到hadoop的檔案系統

package upload;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.URI

演算法學習——中國大學MOOC-陳越何欽銘-資料結構-起步能力自測題——java程式碼實現

自測-1 列印沙漏 (20 point(s)) 本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個“*”,要求按下列格式列印 ***** *** * *** ***** 所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大

SprinvAction學習一裝配bean:通過Java程式碼裝配bean

具體步驟 (1)普通的介面 (2)實現介面的類,該類為需要裝配到spring bean中 (3)配置類,由該類定義bean 示例程式碼: 介面1:(普通的介面) package com.sp

【資料結構與演算法】之單鏈表雙鏈表迴圈連結串列的基本介紹及其Java程式碼實現---第三篇

一、連結串列的基本介紹 連結串列的定義:連結串列是一種遞迴的資料結構,它或者為空(null),或者是指向一個結點(node)的引用,該結點含有一個泛型的元素和一個指向另一條連結串列的引用。----Algorithms  Fourth  Edition   常見的連結串

(一)ArrayList和LinkedList的原理Java程式碼實現效能比較

一、ArrayList1.1、陣列和集合的區別    動態大小,即陣列的大小不可變,集合的大小可變。    ArrayList從名字上來講是陣列列表,表面上是動態大小,其底層實現原理其實還是一個數組。1.2、簡單模擬ArrayList    模擬過程中要注意Array和Arr

通過java程式碼 測試高併發伺服器

話不多少 上程式碼Maven 座標 <!-- http球球 -->  <dependency>        <groupId>org.apache.httpcomponents</groupId>        <art

選擇排序樹形排序堆排序的java程式碼實現

package com.sort; /** * 選擇排序: * 簡單選擇排序,樹形選擇排序與堆排序 * */ public class SelecSortDemo { /** * ------------

【資料結構】圖(深度優先遍歷廣度優先遍歷)的JAVA程式碼實現

圖的遍歷是指從圖中的任一頂點出發,對圖中的所有頂點訪問一次並且只訪問一次。圖的遍歷是圖的一種基本操作,圖中的許多其他操作也都是建立在遍歷的基礎之上。在圖中,沒有特殊的頂點被指定為起始頂點,圖的遍歷可以從任何頂點開始。圖的遍歷主要有深度優先搜尋和廣度優先搜尋兩種方式。深度優先搜

java程式碼實現CSV檔案讀取將資料拆分成多個CSV檔案及資料匯出到CSV檔案

package com.cn; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; impor

經典內部排序演算法學習總結(演算法思想視覺化Java程式碼實現改進複雜度分析穩定性分析)

一、什麼是排序演算法? 排序,顧名思義,就是按照一定的規則排列事物,使之彼此間有序 而排序演算法所要做的工作,就是將資料按照人為制定的比較規則排列好,使資料處於彼此間有序的狀態。 二、為什麼要進行排序? 那為什麼要將資料排序呢?計算機處理速度這麼

【資料結構】堆疊(順序棧鏈棧)的JAVA程式碼實現

堆疊(stack)是一種特殊的線性表,是一種只允許在表的一端進行插入或刪除操作的線性表。表中允許進行插入和刪除操作的一端稱為棧頂,最下面的那一端稱為棧底。棧頂是動態的,它由一個稱為棧頂指標的位置指示器指示。當棧中沒有資料元素時,為空棧。堆疊的插入操作稱為進棧或入棧,堆疊的刪除

【資料結構】二叉樹(順序儲存鏈式儲存)的JAVA程式碼實現

二叉樹是一種非線性的資料結構。它是由n個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩顆不相交的、被分別稱為左子樹、右子樹的二叉樹組成。當集合為空時,稱該二叉樹為空二叉樹。在二叉樹中,一個元素也可以稱做一個結點。二叉樹是有序的,即若將其左右兩個子樹顛倒

【iText5 生成PDF】純Java程式碼實現生成PDF(自定義表格文字水印單元格樣式)

​   工作中遇到需要生成PDF。最終選擇了iText。其他也有通過html再生成。感覺不太適合就用了程式碼實

HIVE的安裝配置mysql的安裝hive建立表建立分割槽修改表等內容hive beeline使用HIVE的四種資料匯入方式使用Java程式碼執行hive的sql命令

1.上傳tar包 這裡我上傳的是apache-hive-1.2.1-bin.tar.gz 2.解壓 mkdir -p /home/tuzq/software/hive/ tar -zxvf apache-hive-1.2.1-bin.tar.gz  -C /home/

pc端通過拖放實現新增刪除功能

話不多說上完整程式碼 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link href="favicon.ico" mce_href="favico

第一個 spring Boot 應用通過Docker 來實現構建執行釋出

1. Docker 簡介 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。Docker image 是

jsp頁面中的java程式碼(jsp表示式jsp小指令碼jsp宣告)

jsp頁面中的java程式碼,有三種:jsp表示式、jsp小指令碼、jsp宣告。 編寫位置:頁面的任意位置。 作用:控制頁面中可變內容的產生。 1.jsp表示式 語法規則:<%= ... %> 轉譯成 Servlet 時的規則:在 service()方法中用 o

Java程式碼靜態檢查規範格式化和checkstyle檢查配置文件

<?xml version="1.0"?> <!DOCTYPE module PUBLIC           "-//Puppy Crawl//DTD Check Configuration 1.2//EN"           "http://www.puppycrawl.co

windows 下 MySQL讀寫分離主從複製通過amoeba代理實現讀寫分離 配置全過程

配置環境: 1.mysql5.6 2.windowsXP 主從複製配置 主伺服器配置 配置my.ini檔案 查詢my.ini地址 my.ini檔案在MySQL Server 5.6目錄下 我的my.ini路徑: C:\Documents and Settings\All