How to do query auto-completion/suggestions in Lucene?

后端 未结 5 1875
刺人心
刺人心 2020-11-27 09:35

I\'m looking for a way to do query auto-completion/suggestions in Lucene. I\'ve Googled around a bit and played around a bit, but all of the examples I\'ve seen seem to be s

5条回答
  •  [愿得一人]
    2020-11-27 10:22

    my code based on lucene 4.2,may help you

    import java.io.File;
    import java.io.IOException;
    
    import org.apache.lucene.analysis.miscellaneous.PerFieldAnalyzerWrapper;
    import org.apache.lucene.index.DirectoryReader;
    import org.apache.lucene.index.IndexWriterConfig;
    import org.apache.lucene.index.IndexWriterConfig.OpenMode;
    import org.apache.lucene.search.spell.Dictionary;
    import org.apache.lucene.search.spell.LuceneDictionary;
    import org.apache.lucene.search.spell.PlainTextDictionary;
    import org.apache.lucene.search.spell.SpellChecker;
    import org.apache.lucene.store.Directory;
    import org.apache.lucene.store.FSDirectory;
    import org.apache.lucene.store.IOContext;
    import org.apache.lucene.store.RAMDirectory;
    import org.apache.lucene.util.Version;
    import org.wltea4pinyin.analyzer.lucene.IKAnalyzer4PinYin;
    
    
    /**
     * 
     * 
     * @author 
     * @version 2013-11-25上午11:13:59
     */
    public class LuceneSpellCheckerDemoService {
    
    private static final String INDEX_FILE = "/Users/r/Documents/jar/luke/youtui/index";
    private static final String INDEX_FILE_SPELL = "/Users/r/Documents/jar/luke/spell";
    
    private static final String INDEX_FIELD = "app_name_quanpin";
    
    public static void main(String args[]) {
    
        try {
            //
            PerFieldAnalyzerWrapper wrapper = new PerFieldAnalyzerWrapper(new IKAnalyzer4PinYin(
                    true));
    
            //  read index conf
            IndexWriterConfig conf = new IndexWriterConfig(Version.LUCENE_42, wrapper);
            conf.setOpenMode(OpenMode.CREATE_OR_APPEND);
    
            // read dictionary
            Directory directory = FSDirectory.open(new File(INDEX_FILE));
            RAMDirectory ramDir = new RAMDirectory(directory, IOContext.READ);
            DirectoryReader indexReader = DirectoryReader.open(ramDir);
    
            Dictionary dic = new LuceneDictionary(indexReader, INDEX_FIELD);
    
    
            SpellChecker sc = new SpellChecker(FSDirectory.open(new File(INDEX_FILE_SPELL)));
            //sc.indexDictionary(new PlainTextDictionary(new File("myfile.txt")), conf, false);
            sc.indexDictionary(dic, conf, true);
            String[] strs = sc.suggestSimilar("zhsiwusdazhanjiangshi", 10);
            for (int i = 0; i < strs.length; i++) {
                System.out.println(strs[i]);
            }
            sc.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    
    }
    

提交回复
热议问题