/** * Build a randomish document for both RAMDirectory and MemoryIndex, * and run all the queries against it. */ public void AssertAgainstRAMDirectory(MemoryIndex memory) { memory.Reset(); StringBuilder fooField = new StringBuilder(); StringBuilder termField = new StringBuilder(); // add up to 250 terms to field "foo" int numFooTerms = Random.nextInt(250 * RandomMultiplier); for (int i = 0; i < numFooTerms; i++) { fooField.append(" "); fooField.append(RandomTerm()); } // add up to 250 terms to field "term" int numTermTerms = Random.nextInt(250 * RandomMultiplier); for (int i = 0; i < numTermTerms; i++) { termField.append(" "); termField.append(RandomTerm()); } Store.Directory ramdir = new RAMDirectory(); Analyzer analyzer = RandomAnalyzer(); IndexWriter writer = new IndexWriter(ramdir, new IndexWriterConfig(TEST_VERSION_CURRENT, analyzer).SetCodec(TestUtil.AlwaysPostingsFormat(new Lucene41PostingsFormat()))); Document doc = new Document(); Field field1 = NewTextField("foo", fooField.toString(), Field.Store.NO); Field field2 = NewTextField("term", termField.toString(), Field.Store.NO); doc.Add(field1); doc.Add(field2); writer.AddDocument(doc); writer.Dispose(); memory.AddField("foo", fooField.toString(), analyzer); memory.AddField("term", termField.toString(), analyzer); if (Verbose) { Console.WriteLine("Random MemoryIndex:\n" + memory.toString()); Console.WriteLine("Same index as RAMDirectory: " + RamUsageEstimator.HumanReadableUnits(RamUsageEstimator.SizeOf(ramdir))); Console.WriteLine(); } else { assertTrue(memory.GetMemorySize() > 0L); } AtomicReader reader = (AtomicReader)memory.CreateSearcher().IndexReader; DirectoryReader competitor = DirectoryReader.Open(ramdir); DuellReaders(competitor, reader); IOUtils.Dispose(reader, competitor); AssertAllQueries(memory, ramdir, analyzer); ramdir.Dispose(); }
/// <summary> /// Returns a String representation of the index data for debugging purposes. /// </summary> /// <returns> the string representation </returns> public override string ToString() { StringBuilder result = new StringBuilder(256); SortFields(); int sumPositions = 0; int sumTerms = 0; BytesRef spare = new BytesRef(); for (int i = 0; i < sortedFields.Length; i++) { KeyValuePair <string, Info> entry = sortedFields[i]; string fieldName = entry.Key; Info info = entry.Value; info.SortTerms(); result.Append(fieldName + ":\n"); SliceByteStartArray sliceArray = info.sliceArray; int numPositions = 0; Int32BlockPool.SliceReader postingsReader = new Int32BlockPool.SliceReader(intBlockPool); for (int j = 0; j < info.terms.Count; j++) { int ord = info.sortedTerms[j]; info.terms.Get(ord, spare); int freq = sliceArray.freq[ord]; result.Append("\t'" + spare + "':" + freq + ":"); postingsReader.Reset(sliceArray.start[ord], sliceArray.end[ord]); result.Append(" ["); int iters = storeOffsets ? 3 : 1; while (!postingsReader.IsEndOfSlice) { result.Append("("); for (int k = 0; k < iters; k++) { result.Append(postingsReader.ReadInt32()); if (k < iters - 1) { result.Append(", "); } } result.Append(")"); if (!postingsReader.IsEndOfSlice) { result.Append(","); } } result.Append("]"); result.Append("\n"); numPositions += freq; } result.Append("\tterms=" + info.terms.Count); result.Append(", positions=" + numPositions); result.Append(", memory=" + RamUsageEstimator.HumanReadableUnits(RamUsageEstimator.SizeOf(info))); result.Append("\n"); sumPositions += numPositions; sumTerms += info.terms.Count; } result.Append("\nfields=" + sortedFields.Length); result.Append(", terms=" + sumTerms); result.Append(", positions=" + sumPositions); result.Append(", memory=" + RamUsageEstimator.HumanReadableUnits(GetMemorySize())); return(result.ToString()); }
/// <summary> /// Computes (and stores) the estimated size of the cache <see cref="Value"/> /// </summary> /// <seealso cref="EstimatedSize"/> public void EstimateSize() { long bytesUsed = RamUsageEstimator.SizeOf(Value); size = RamUsageEstimator.HumanReadableUnits(bytesUsed); }
/// <summary> Computes (and stores) the estimated size of the cache Value </summary> /// <seealso cref="EstimatedSize"> /// </seealso> public virtual void EstimateSize(RamUsageEstimator ramCalc) { long size = ramCalc.EstimateRamUsage(Value); EstimatedSize = RamUsageEstimator.HumanReadableUnits(size, new System.Globalization.NumberFormatInfo()); // {{Aroush-2.9}} in Java, the formater is set to "0.#", so we need to do the same in C# }