我尝试使用DateTools.dateToString()方法索引日期.它的工作正常索引和搜索.
但是我已经编入索引的数据有一些引用,就是将Date作为一个新的Date().getTime()进行索引.
所以我的问题是如何对这个数据执行RangeSearch Query
任何解决这个?
提前致谢.
解决方法
您需要在您的日期字段上使用TermRangeQuery.该字段始终需要使用DateTools.dateToString()进行索引,以使其正常工作.以下是使用Lucene 3.0在日期范围内进行索引和搜索的完整示例:
public class LuceneDateRange { public static void main(String[] args) throws Exception { // setup Lucene to use an in-memory index Directory directory = new RAMDirectory(); Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30); MaxFieldLength mlf = MaxFieldLength.UNLIMITED; IndexWriter writer = new IndexWriter(directory,analyzer,true,mlf); // use the current time as the base of dates for this example long baseTime = System.currentTimeMillis(); // index 10 documents with 1 second between dates for (int i = 0; i < 10; i++) { Document doc = new Document(); String id = String.valueOf(i); String date = buildDate(baseTime + i * 1000); doc.add(new Field("id",id,Store.YES,Index.NOT_ANALYZED)); doc.add(new Field("date",date,Index.NOT_ANALYZED)); writer.addDocument(doc); } writer.close(); // search for documents from 5 to 8 seconds after base,inclusive IndexSearcher searcher = new IndexSearcher(directory); String lowerDate = buildDate(baseTime + 5000); String upperDate = buildDate(baseTime + 8000); boolean includeLower = true; boolean includeUpper = true; TermRangeQuery query = new TermRangeQuery("date",lowerDate,upperDate,includeLower,includeUpper); // display search results TopDocs topDocs = searcher.search(query,10); for (scoreDoc scoreDoc : topDocs.scoreDocs) { Document doc = searcher.doc(scoreDoc.doc); System.out.println(doc); } } public static String buildDate(long time) { return DateTools.dateToString(new Date(time),Resolution.SECOND); } }