diff --git lucene/suggest/src/java/org/apache/lucene/search/suggest/Lookup.java lucene/suggest/src/java/org/apache/lucene/search/suggest/Lookup.java index dd35d85..3b4e09c 100644 --- lucene/suggest/src/java/org/apache/lucene/search/suggest/Lookup.java +++ lucene/suggest/src/java/org/apache/lucene/search/suggest/Lookup.java @@ -201,4 +201,9 @@ public abstract class Lookup { */ public abstract boolean load(InputStream input) throws IOException; + /** + * Get the size of the underlying lookup implementation in memory + * @return ram size of the lookup implementation in bytes + */ + public abstract long sizeInBytes(); } diff --git lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java index 7d388aa..5d4dc52 100644 --- lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java +++ lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingInfixSuggester.java @@ -72,6 +72,7 @@ import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.IOUtils; +import org.apache.lucene.util.RamUsageEstimator; import org.apache.lucene.util.Version; // TODO: @@ -599,4 +600,9 @@ public class AnalyzingInfixSuggester extends Lookup implements Closeable { dir = null; } } + + @Override + public long sizeInBytes() { + return RamUsageEstimator.sizeOf(this); + } }; diff --git lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java index 3187845..4278440 100644 --- lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java +++ lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/AnalyzingSuggester.java @@ -250,6 +250,7 @@ public class AnalyzingSuggester extends Lookup { } /** Returns byte size of the underlying FST. */ + @Override public long sizeInBytes() { return fst == null ? 0 : fst.sizeInBytes(); } diff --git lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/FreeTextSuggester.java lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/FreeTextSuggester.java index 36c22a7..797acae 100644 --- lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/FreeTextSuggester.java +++ lucene/suggest/src/java/org/apache/lucene/search/suggest/analyzing/FreeTextSuggester.java @@ -198,7 +198,8 @@ public class FreeTextSuggester extends Lookup { this.separator = separator; } - /** Returns byte size of the underlying FST. */ + /** Returns byte size of the underlying FST. */ + @Override public long sizeInBytes() { if (fst == null) { return 0; diff --git lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/FSTCompletionLookup.java lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/FSTCompletionLookup.java index 3dbf66d..7c88a3e 100644 --- lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/FSTCompletionLookup.java +++ lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/FSTCompletionLookup.java @@ -288,4 +288,9 @@ public class FSTCompletionLookup extends Lookup { } return true; } + + @Override + public long sizeInBytes() { + return RamUsageEstimator.sizeOf(this); + } } diff --git lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/WFSTCompletionLookup.java lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/WFSTCompletionLookup.java index eb07356..eaff404 100644 --- lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/WFSTCompletionLookup.java +++ lucene/suggest/src/java/org/apache/lucene/search/suggest/fst/WFSTCompletionLookup.java @@ -287,4 +287,10 @@ public class WFSTCompletionLookup extends Lookup { return left.compareTo(right); } }; + + /** Returns byte size of the underlying FST. */ + @Override + public long sizeInBytes() { + return (fst == null) ? 0 : fst.sizeInBytes(); + } } diff --git lucene/suggest/src/java/org/apache/lucene/search/suggest/jaspell/JaspellLookup.java lucene/suggest/src/java/org/apache/lucene/search/suggest/jaspell/JaspellLookup.java index 0482e52..65c4532 100644 --- lucene/suggest/src/java/org/apache/lucene/search/suggest/jaspell/JaspellLookup.java +++ lucene/suggest/src/java/org/apache/lucene/search/suggest/jaspell/JaspellLookup.java @@ -31,6 +31,7 @@ import org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie.TSTNode import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.CharsRef; import org.apache.lucene.util.IOUtils; +import org.apache.lucene.util.RamUsageEstimator; import org.apache.lucene.util.UnicodeUtil; /** @@ -200,4 +201,10 @@ public class JaspellLookup extends Lookup { } return true; } + + /** Returns byte size of the underlying TST. */ + @Override + public long sizeInBytes() { + return RamUsageEstimator.sizeOf(trie); + } } diff --git lucene/suggest/src/java/org/apache/lucene/search/suggest/tst/TSTLookup.java lucene/suggest/src/java/org/apache/lucene/search/suggest/tst/TSTLookup.java index 21ed3ad..59cd5f9 100644 --- lucene/suggest/src/java/org/apache/lucene/search/suggest/tst/TSTLookup.java +++ lucene/suggest/src/java/org/apache/lucene/search/suggest/tst/TSTLookup.java @@ -31,6 +31,7 @@ import org.apache.lucene.search.suggest.SortedInputIterator; import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.CharsRef; import org.apache.lucene.util.IOUtils; +import org.apache.lucene.util.RamUsageEstimator; import org.apache.lucene.util.UnicodeUtil; /** @@ -219,5 +220,11 @@ public class TSTLookup extends Lookup { } return true; } + + /** Returns byte size of the underlying TST */ + @Override + public long sizeInBytes() { + return RamUsageEstimator.sizeOf(autocomplete); + } } diff --git lucene/suggest/src/test/org/apache/lucene/search/suggest/LookupBenchmarkTest.java lucene/suggest/src/test/org/apache/lucene/search/suggest/LookupBenchmarkTest.java index 7858a23..4874234 100644 --- lucene/suggest/src/test/org/apache/lucene/search/suggest/LookupBenchmarkTest.java +++ lucene/suggest/src/test/org/apache/lucene/search/suggest/LookupBenchmarkTest.java @@ -144,15 +144,7 @@ public class LookupBenchmarkTest extends LuceneTestCase { System.err.println("-- RAM consumption"); for (Class cls : benchmarkClasses) { Lookup lookup = buildLookup(cls, dictionaryInput); - long sizeInBytes; - if (lookup instanceof AnalyzingSuggester) { - // Just get size of FST: else we are also measuring - // size of MockAnalyzer which is non-trivial and - // varies depending on test seed: - sizeInBytes = ((AnalyzingSuggester) lookup).sizeInBytes(); - } else { - sizeInBytes = RamUsageEstimator.sizeOf(lookup); - } + long sizeInBytes = lookup.sizeInBytes(); System.err.println( String.format(Locale.ROOT, "%-15s size[B]:%,13d", lookup.getClass().getSimpleName(),