0

複数の日付で発生するイベントがあります (次の 6 か月間は毎月 5 日など)。ユーザーが 4 日に次の 45 日間のイベントを検索すると、上記のイベントが表示されますが、次の 7 日間の 6 日のようなクエリでは、上記のイベントが返されません。

イベントのドキュメントを作成し、同じドキュメントに複数の日付を追加しました。

var event1 = new Document();
event1.Add(new Field("Id", "2", Field.Store.YES, Field.Index.NOT_ANALYZED));
event1.Add(new Field("Name", "Ford", Field.Store.YES, Field.Index.ANALYZED));
event1.Add(new Field("Desc", "Focus", Field.Store.YES, Field.Index.ANALYZED));
event1.Add(new NumericField("Date", (int)new DateTime(2012, 6, 05).Subtract(dt).TotalMinutes, Field.Store.YES, true));
event1.Add(new NumericField("Date", (int)new DateTime(2012, 7, 05).Subtract(dt).TotalMinutes, Field.Store.YES, true));
event1.Add(new NumericField("Date", (int)new DateTime(2012, 8, 05).Subtract(dt).TotalMinutes, Field.Store.YES, true));

アイデアは、特定の日付または日付範囲で検索すると機能するはずだということです。しかし、このドキュメントを書き込もうとすると、NullReferenceException がスローされます。

 Directory directory = FSDirectory.Open(new DirectoryInfo(Environment.CurrentDirectory + "\\LuceneIndex"));
 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);

 var writer = new IndexWriter(directory, true, analyzer, true);
 writer.AddDocument(event1);

これらのタイプの検索を実行する方法がわかりません。

更新 1: writer.AddDocument(event1); null参照を引き起こし、

更新 2:

at Lucene.Net.Store.IndexOutput.WriteString(String s)
at Lucene.Net.Index.FieldsWriter.WriteField(FieldInfo fi, Fieldable field)
at Lucene.Net.Index.StoredFieldsWriterPerThread.AddField(Fieldable field, FieldInfo fieldInfo)
at Lucene.Net.Index.DocFieldProcessorPerThread.ProcessDocument()
at Lucene.Net.Index.DocumentsWriter.UpdateDocument(Document doc, Analyzer analyzer, Term delTerm)
at Lucene.Net.Index.DocumentsWriter.AddDocument(Document doc, Analyzer analyzer)
at Lucene.Net.Index.IndexWriter.AddDocument(Document doc, Analyzer analyzer)
at Lucene.Net.Index.IndexWriter.AddDocument(Document doc)
at luceneSearch.Program.Main(String[] args) in 
4

1 に答える 1

0

NumericField コンストラクターは、実際の値ではなく、precisionStep を受け入れます。正しく使用するには、 SetIntValue (またはその他の set*Value メソッド)を呼び出す必要があります。

event1.Add(new NumericField("Date", Field.Store.YES, true)
             .SetIntValue((int)new DateTime(2012, 6, 05).Subtract(dt).TotalMinutes));
event1.Add(new NumericField("Date", Field.Store.YES, true)
             .SetIntValue((int)new DateTime(2012, 7, 05).Subtract(dt).TotalMinutes));
event1.Add(new NumericField("Date", Field.Store.YES, true)
             .SetIntValue((int)new DateTime(2012, 8, 05).Subtract(dt).TotalMinutes));

NumericField.StringValue()値が設定されていない場合は null を返すため、例外が発生します。

于 2012-05-24T20:46:08.347 に答える