⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 searchtool.java

📁 Lucene+nuctch一书的全部源码 测试源码 和几个简单的项目
💻 JAVA
字号:
package Chapter12;


import org.apache.lucene.store.Directory; 
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.search.*;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.ParseException;

import org.apache.lucene.index.*;
import java.io.*;
import java.util.*;

public class SearchTool {
	private static String Dest_Index_Path = "D:\\workshop\\alldata3";
	private boolean SearchFinish = false; 
	private int result_num = 0;
	
	ConfigManager conf = new ConfigManager();
	
	/*========================================================
	 * 主函数,检索索引信息
	 *========================================================*/
	public static void main(String[] args) {
		
		SearchTool tool = new SearchTool();
		File indexpath = new File(Dest_Index_Path);
		
		try {
			ArrayList list = tool.BasicSearch("2","science",10,1);
			System.out.println(" Index searcher " + list.size() + "  docs");			
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
	public int getResultNum() {
		return result_num;
	}
	public void setResultNum(int num) {
		result_num = num;
	}
	
	public int GetIndexNum() {
		IndexReader reader = null;
		try {
			reader = IndexReader.open(Dest_Index_Path);
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return reader.numDocs();
	}
	
	public String HighLightWords(String HighLightContent, String[] KeyWords) {
		String HighLightTitle = "";
		for (int i = 0; i < KeyWords.length; i++) {
			HighLightTitle = HighLightContent.replaceAll(KeyWords[i],
					"<font color=#C60A00>" + KeyWords[i] + "</font>");
		}
		return HighLightTitle;
	}
	public String HighLightWords(String searchType, String HighLightContent,
			String[] KeyWords) {
		String HighLightDescription = null;
		String[] ContentSplit = null;
		for (int i = 0; i < KeyWords.length; i++) {
			int pos = HighLightContent.indexOf(KeyWords[i]);
			int start = pos - 120 / (KeyWords.length + 1);
			if (start < 0)
				start = 1;
			int end = pos + 120 / (KeyWords.length + 1);
			if (end > HighLightContent.length())
				end = HighLightContent.length();
			HighLightDescription = HighLightDescription
					+ HighLightContent.substring(start, end) + "...";
		}
		for (int i = 0; i < KeyWords.length; i++) {
			HighLightDescription = HighLightDescription.replaceAll(KeyWords[i],
					"<font color=#C60A00>" + KeyWords[i] + "</font>");
		}
		HighLightDescription = HighLightDescription.replaceAll("null", "");
		return HighLightDescription;
	}

	public ArrayList BasicSearch(String searchType, String keyWord,
			int pageSize, int CurrentPage) throws ParseException {
		
		if (CurrentPage > 50)
			CurrentPage = 50;
		if (CurrentPage < 1)
			CurrentPage = 1;
		
		ArrayList<SearchResultBean> SearchResult = new ArrayList<SearchResultBean>();
		boolean HasBeenSearched = false;
		StandardAnalyzer analyzer = new StandardAnalyzer();
		
		while (!SearchFinish) {
			try {
				String searchField = "";
				if (searchType.equalsIgnoreCase("1"))
					searchField = "filetype";
				if (searchType.equalsIgnoreCase("2"))
					searchField = "contents";
				BooleanQuery query = new BooleanQuery();
				String[] KeyWords = keyWord.split(" ");
				IndexSearcher searcher = new IndexSearcher( Dest_Index_Path );

				String keyword = new String();
				for (int i = 0; i < KeyWords.length; i++) {// 构建查询条件
					TermQuery q = new TermQuery(new Term(searchField,KeyWords[i]));
					query.add(q, BooleanClause.Occur.MUST);
					keyword = keyword + KeyWords[i] + " ";
				}
				Hits hits =null;
				hits= searcher.search(query);
				
				this.setResultNum(hits.length());
				if (hits.length() == 0 && HasBeenSearched == false) { // 如果没有查到信息
					// keyWord = analyzer.segment(keyWord, " ");      // 分词

					HasBeenSearched = true;
				} else {
					SearchFinish = true;
					if (CurrentPage > this.getResultNum() / pageSize)
						CurrentPage = this.getResultNum() / pageSize;

					if (CurrentPage == 0 && this.getResultNum() >= 0) {
						CurrentPage = 1;
						pageSize = this.getResultNum();
					}
					for (int i = (CurrentPage - 1) * pageSize; i < CurrentPage * pageSize; i++) {
						SearchResultBean searchResultBean = new SearchResultBean();
						SearchResult.add( searchResultBean );
						searchResultBean = null;						
					}
				}

				hits=null;
				System.gc();
			} catch (CorruptIndexException e1) {
				e1.printStackTrace();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}
		return SearchResult;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -