0

開始日フィールドを持つ lucene.net インデックスにイベントのリストを保存しています。ユーザーがクリックして、表示中のイベントに関連する次のイベント (開始日フィールドに基づく) を表示するためのボタンを追加したいと考えています。

現在、ConstantScoreRangeQuery検索を使用して 2 つの日付間のイベントを検索していますが、インデックスで次の日付を取得する方法がわかりません。

4

1 に答える 1

0

を使用してそれを行う簡単な方法を次に示します。TermEnum

        RAMDirectory ramDir = new RAMDirectory();

        IndexWriter iw = new IndexWriter(ramDir, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_CURRENT));

        Document d = new Document();
        Field date = new Field("date", "", Field.Store.YES, Field.Index.ANALYZED);
        d.Add(date);

        DateTime first = DateTime.Now.Subtract(TimeSpan.FromDays(5));
        DateTime second = DateTime.Now.Subtract(TimeSpan.FromDays(4));
        DateTime third = DateTime.Now.Subtract(TimeSpan.FromDays(3));
        DateTime fourth = DateTime.Now.Subtract(TimeSpan.FromDays(2));
        DateTime fifth = DateTime.Now.Subtract(TimeSpan.FromDays(1));

        date.SetValue(DateTools.DateToString(first, DateTools.Resolution.MINUTE));
        iw.AddDocument(d);
        date.SetValue(DateTools.DateToString(second, DateTools.Resolution.MINUTE));
        iw.AddDocument(d);
        date.SetValue(DateTools.DateToString(third, DateTools.Resolution.MINUTE));
        iw.AddDocument(d);
        date.SetValue(DateTools.DateToString(fourth, DateTools.Resolution.MINUTE));
        iw.AddDocument(d);
        date.SetValue(DateTools.DateToString(fifth, DateTools.Resolution.MINUTE));
        iw.AddDocument(d);

        iw.Commit();

        IndexReader ir = iw.GetReader();

        var termEnum = ir.Terms(new Term("date", DateTools.DateToString(second, DateTools.Resolution.MINUTE)));

        if (termEnum.Next())
        {
            Console.WriteLine(DateTools.StringToDate(termEnum.Term().Text()));
            Console.WriteLine(DateTools.StringToDate(termEnum.Term().Text()).Day == third.Day);
        }

        Console.Read();
于 2012-10-09T15:32:13.973 に答える