首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

Lucene 入门示范

2013-04-09 
Lucene 入门示例package Demoimport java.io.BufferedReaderimport java.io.Fileimport java.io.FileIn

Lucene 入门示例

package Demo;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.nio.Buffer;import java.util.Date;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.index.DirectoryReader;import org.apache.lucene.index.IndexReader;import org.apache.lucene.queryparser.classic.ParseException;import org.apache.lucene.queryparser.classic.QueryParser;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.TopDocs;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;import org.xml.sax.InputSource;public class Searchfiles {/** * @param args * @throws IOException  * @throws ParseException  */public static void main(String[] args) throws IOException, ParseException {// TODO Auto-generated method stubString index = "index";String field = "contents";String queries = null;int repeat = 0;boolean raw = false;String queryString = null;int hitsPerPage = 10;// 打开索引所在的文件夹IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(index)));//根据indexReader 打开的索引文件 建立检索IndexSearcher searcher = new IndexSearcher(reader);Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);BufferedReader in = null;if(queries != null){in = new BufferedReader(new InputStreamReader(new FileInputStream(queries),"UTF-8"));}else {in = new BufferedReader(new InputStreamReader(System.in,"UTF-8"));}QueryParser parser = new QueryParser(Version.LUCENE_40, field, analyzer);while(true){if(queries == null && queryString == null){System.out.println("Enter query: ");}String line = queryString !=null ? queryString : in.readLine();if(line==null || line.length()== -1)break;line = line.trim();if(line.length()==0)break;Query query = parser.parse(line);System.out.println("Searching for : " + query.toString(field));if(repeat > 0) //repeat & time as benchmark{Date start = new Date();for(int i =0 ;i < repeat;i++)searcher.search(query, null,100);Date end = new Date();System.out.println("Time: + " +(end.getTime() - start.getTime()) + "ms.");}doPagingSearch(in, searcher, query, hitsPerPage, raw, queries == null && queryString==null);if(queryString == null)break;}}public static void doPagingSearch(BufferedReader in , IndexSearcher searcher,     Query query,int hitsPerPage,boolean raw ,boolean interactive ) throws IOException{// Collect enough docs to show 5 pagesTopDocs results = searcher.search(query, 5*hitsPerPage);ScoreDoc[] hits =results.scoreDocs;int numTotalHits = results.totalHits;System.out.println(numTotalHits + " total matching documents");int start = 0;int end = Math.min(numTotalHits, hitsPerPage);while(true){if(end > hits.length){System.out.println("Only results 1 - "+ hits.length+ "  of" + numTotalHits + "total matching documents collected .");System.out.println("Collect more (y/n)?");String line = in.readLine();if(line.length()==0||line.charAt(0)=='n'){break;}hits =searcher.search(query, numTotalHits).scoreDocs;}end = Math.min(hits.length, start+hitsPerPage);for(int i = start; i < end ;i++){if(raw)  // output raw format{System.out.println("doc="+hits[i].doc + " score= " + hits[i].score);continue;}Document doc = searcher.doc(hits[i].doc);String path = doc.get("path");if(path!=null){System.out.println((i+1)+"."+path);String title = doc.get("title");if(title!=null){System.out.println("  Title:" + doc.get("title"));}}else{System.out.println((i+1) + "." + "No path for this document");}}if(!interactive || end==0){break;}if(numTotalHits >= end){boolean quit = false;while(true){System.out.print("Press ");if(start - hitsPerPage >=0){System.out.print("<p>revious page, ");}if(start + hitsPerPage < numTotalHits){System.out.print("(n)ext page, ");}System.out.print("(q) uit or enter number to jump to a page.");String line = in.readLine();if(line.length()==0||line.charAt(0)=='q'){quit = true;break;}if(line.charAt(0)=='p'){start = Math.max(0, start - hitsPerPage);break;}else if(line.charAt(0)=='n'){if(start+hitsPerPage < numTotalHits)start+=hitsPerPage;break;}else{int  page = Integer.parseInt(line);if((page - 1)*hitsPerPage  < numTotalHits){start = (page -1 )*hitsPerPage;break;}else {System.out.println("No such page!");}}}if(quit)break;end = Math.min(numTotalHits, start+hitsPerPage);}}}}


热点排行