lucene日期索引、查询

注意使用lucene的版本,调试本例的时候,作者使用的是lucene 2.4.1
package com.zhx.test;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.SimpleAnalyzer;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.RangeQuery;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.LockObtainFailedException;

public class IndexDate {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//索引所在的文件夹
		String IDNEX_PATH = "Z:/data/paoding/test_index";  
		//索引字段名
		String FILED_NAME = "fieldDate";
		//索引字段名 
		String FILED_CONTENT = "field_content";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  
        //获取Paoding中文分词器   
        Analyzer analyzer = new SimpleAnalyzer();   
        //建立索引   
        IndexWriter writer;   
        try {   
        	//IndexWriter.MaxFieldLength(1)表示只索引到第几个项
            writer = new IndexWriter(IDNEX_PATH, analyzer, true,new IndexWriter.MaxFieldLength(1));   
            //索引日期字段的值
            Date fieldDate = sdf.parse("2009-08-22");
            Document doc1 = new Document(); 
            //用DateTools工具转换成String类型
            String fieldDateStr = DateTools.dateToString(fieldDate, 
            		DateTools.Resolution.MINUTE);
            //创建field,不存储,不分词但索引
            Field field = new Field(FILED_NAME, fieldDateStr, Field.Store.NO,   
                Field.Index.NOT_ANALYZED, Field.TermVector.NO);   
            //创建field,存储,分词并索引
            Field fieldContent = new Field(FILED_CONTENT, "记录1", Field.Store.YES,   
                    Field.Index.ANALYZED, Field.TermVector.YES); 
            //添加进doc
            doc1.add(field);
            doc1.add(fieldContent);
            writer.addDocument(doc1); 
            
            Document doc2  = new Document(); 
            fieldDate = sdf.parse("2009-08-20");
            fieldDateStr = DateTools.dateToString(fieldDate, 
            		DateTools.Resolution.MINUTE);
            field = new Field(FILED_NAME, fieldDateStr, Field.Store.NO,   
                Field.Index.NOT_ANALYZED, Field.TermVector.NO); 
            fieldContent = new Field(FILED_CONTENT, "记录2", Field.Store.YES,   
                    Field.Index.ANALYZED, Field.TermVector.YES);  
            doc2.add(field);   
            doc2.add(fieldContent);
            writer.addDocument(doc2);   
            writer.close();   
            System.out.println("Indexed success!");   
                
            //检索   
            IndexReader reader = IndexReader.open(IDNEX_PATH); 
            Date startDate = sdf.parse("2009-07-21");
            Date endDate = sdf.parse("2009-09-21");
            String startDateStr = DateTools.dateToString(startDate, 
            		DateTools.Resolution.MINUTE);
            String endDateStr = DateTools.dateToString(endDate, 
            		DateTools.Resolution.MINUTE);
            Term start = new Term(FILED_NAME,startDateStr);
            Term end = new Term(FILED_NAME,endDateStr);
            RangeQuery rangeQuery = new RangeQuery(start,end,true);  
            Searcher searcher = new IndexSearcher(reader);   
            //列表大小
            int count = 10;
            TopDocs topDocs = searcher.search(rangeQuery,count);   
            if (topDocs.totalHits == 0) {   
                System.out.println("hits.length=0");   
            }else{
            	//获取记录数组
            	ScoreDoc[] hits = topDocs.scoreDocs;
            	for(int i=0;i<hits.length;i++){
            		//获取某条记录的Id
            		int docId = hits[i].doc;
            		Document doc = searcher.doc(docId);
                    System.out.println("第"+i+"结果:"+doc.get(FILED_CONTENT));
            	}
            } 
            reader.close();   
        } catch (CorruptIndexException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
        } catch (LockObtainFailedException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
        } catch (IOException e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   

		} catch (java.text.ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
  
  

	}

}

你可能感兴趣的:(apache,Lucene)