Java – index and search date in Lucene

I tried using datetools The datetostring() method indexes the date It works properly for indexing and searching

However, the data I have indexed has some references, that is, take date as a new date () Gettime() to index

So my question is how to execute rangesearch query on this data

Any solution to this?

Thank you in advance

Solution

You need to use termrangequery. On your date field This field always requires datetools Datetostring() is indexed to make it work properly The following is a complete example of indexing and searching within a date range using 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);
    }
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>