public virtual void TestNumericFields() { foreach (string name in OldNames) { Directory dir = OldIndexDirs[name]; IndexReader reader = DirectoryReader.Open(dir); IndexSearcher searcher = NewSearcher(reader); for (int id = 10; id < 15; id++) { ScoreDoc[] hits = searcher.Search(NumericRangeQuery.NewInt32Range("trieInt", 4, Convert.ToInt32(id), Convert.ToInt32(id), true, true), 100).ScoreDocs; Assert.AreEqual(1, hits.Length, "wrong number of hits"); Document d = searcher.Doc(hits[0].Doc); Assert.AreEqual(Convert.ToString(id), d.Get("id")); hits = searcher.Search(NumericRangeQuery.NewInt64Range("trieLong", 4, Convert.ToInt64(id), Convert.ToInt64(id), true, true), 100).ScoreDocs; Assert.AreEqual(1, hits.Length, "wrong number of hits"); d = searcher.Doc(hits[0].Doc); Assert.AreEqual(Convert.ToString(id), d.Get("id")); } // check that also lower-precision fields are ok ScoreDoc[] hits_ = searcher.Search(NumericRangeQuery.NewInt32Range("trieInt", 4, int.MinValue, int.MaxValue, false, false), 100).ScoreDocs; Assert.AreEqual(34, hits_.Length, "wrong number of hits"); hits_ = searcher.Search(NumericRangeQuery.NewInt64Range("trieLong", 4, long.MinValue, long.MaxValue, false, false), 100).ScoreDocs; Assert.AreEqual(34, hits_.Length, "wrong number of hits"); // check decoding into field cache FieldCache.Int32s fci = FieldCache.DEFAULT.GetInt32s(SlowCompositeReaderWrapper.Wrap(searcher.IndexReader), "trieInt", false); int maxDoc = searcher.IndexReader.MaxDoc; for (int doc = 0; doc < maxDoc; doc++) { int val = fci.Get(doc); Assert.IsTrue(val >= 0 && val < 35, "value in id bounds"); } FieldCache.Int64s fcl = FieldCache.DEFAULT.GetInt64s(SlowCompositeReaderWrapper.Wrap(searcher.IndexReader), "trieLong", false); for (int doc = 0; doc < maxDoc; doc++) { long val = fcl.Get(doc); Assert.IsTrue(val >= 0L && val < 35L, "value in id bounds"); } reader.Dispose(); } }
/// <summary> /// NOTE: This was longVal() in Lucene /// </summary> public override long Int64Val(int doc) { return(arr.Get(doc)); }