@Override public void build(SolrCore core, SolrIndexSearcher searcher) throws IOException { IndexReader reader = null; if (sourceLocation == null) { // Load from Solr's index reader = searcher.getIndexReader(); } else { // Load from Lucene index at given sourceLocation reader = this.reader; } // Create the dictionary dictionary = new HighFrequencyDictionary(reader, field, threshold); // TODO: maybe whether or not to clear the index should be configurable? // an incremental update is faster (just adds new terms), but if you 'expunged' // old terms I think they might hang around. spellChecker.clearIndex(); // TODO: you should be able to specify the IWC params? // TODO: if we enable this, codec gets angry since field won't exist in the schema // config.setCodec(core.getCodec()); spellChecker.indexDictionary(dictionary, new IndexWriterConfig(core.getSolrConfig().luceneMatchVersion, null), false); }
@Override public Dictionary create(SolrCore core, SolrIndexSearcher searcher) { if(params == null) { // should not happen; implies setParams was not called throw new IllegalStateException("Value of params not set"); } String field = (String)params.get(SolrSpellChecker.FIELD); if (field == null) { throw new IllegalArgumentException(SolrSpellChecker.FIELD + " is a mandatory parameter"); } float threshold = params.get(THRESHOLD_TOKEN_FREQUENCY) == null ? 0.0f : (Float)params.get(THRESHOLD_TOKEN_FREQUENCY); return new HighFrequencyDictionary(searcher.getIndexReader(), field, threshold); }
@NotNull private static SpellChecker createIndexSpellchecker(@NotNull final Directory index) throws IOException { final Directory spellCheckerDirectory = new RAMDirectory(); final IndexReader indexReader = DirectoryReader.open(index); final Analyzer analyzer = new SimpleAnalyzer(); final IndexWriterConfig config = new IndexWriterConfig(analyzer); final Dictionary dictionary = new HighFrequencyDictionary(indexReader, DRUG_TERMS_FIELD, 0.0f); final SpellChecker spellChecker = new SpellChecker(spellCheckerDirectory); spellChecker.indexDictionary(dictionary, config, false); spellChecker.setAccuracy(SPELLCHECK_ACCURACY); return spellChecker; }
public void testEmpty() throws Exception { Directory dir = newDirectory(); IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random()))); writer.commit(); writer.close(); IndexReader ir = DirectoryReader.open(dir); Dictionary dictionary = new HighFrequencyDictionary(ir, "bogus", 0.1f); BytesRefIterator tf = dictionary.getEntryIterator(); assertNull(tf.getComparator()); assertNull(tf.next()); dir.close(); }
public void testEmpty() throws Exception { Directory dir = newDirectory(); IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()))); writer.commit(); writer.close(); IndexReader ir = DirectoryReader.open(dir); Dictionary dictionary = new HighFrequencyDictionary(ir, "bogus", 0.1f); BytesRefIterator tf = dictionary.getWordsIterator(); assertNull(tf.getComparator()); assertNull(tf.next()); dir.close(); }