Java Lucene建议(建议更受欢迎标志的行为)

Java Lucene建议(建议更受欢迎标志的行为),java,lucene,Java,Lucene,我想使用Lucene建议机制来帮助最终用户确定他什么时候打字 Lucene的SpellChecker有一个方法SuggestSimular,应该接收SuggestMode标志。使用flagSuggestMode.SUGGEST\u MORE\u POPULAR,我希望只对当前目录中更常见的word提供建议 下面的代码似乎不符合这一假设: import org.apache.lucene.analysis.core.SimpleAnalyzer; import org.apache.lucene.

我想使用Lucene建议机制来帮助最终用户确定他什么时候打字

Lucene的
SpellChecker
有一个方法
SuggestSimular
,应该接收SuggestMode标志。使用flag
SuggestMode.SUGGEST\u MORE\u POPULAR
,我希望只对当前目录中更常见的word提供建议

下面的代码似乎不符合这一假设:

import org.apache.lucene.analysis.core.SimpleAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.search.spell.LuceneDictionary;
import org.apache.lucene.search.spell.SpellChecker;
import org.apache.lucene.search.spell.SuggestMode;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

public class SuggestTest {

    static public void main(String args[]) throws IOException {

        final String NAME_FIELD = "NAME";

        Directory directory = new RAMDirectory();
        IndexWriter writer = new IndexWriter(directory,
                new IndexWriterConfig(new SimpleAnalyzer()));
        writer.deleteAll();
        writer.commit();

        List<String> list = new LinkedList<>();

        for (int i = 0; i < 1000; i++)
            list.add("wafa");

        list.add("waffa");

        for (String name : list) {
            Document doc = new Document();
            doc.add(new TextField(NAME_FIELD, name, Field.Store.YES));
            writer.addDocument(doc);
        }

        writer.close();
        DirectoryReader directoryReader = DirectoryReader.open(directory);


        LuceneDictionary nameDictionary = new LuceneDictionary(directoryReader, NAME_FIELD);

        IndexWriterConfig config = new IndexWriterConfig(new SimpleAnalyzer());

        SpellChecker spellChecker = new SpellChecker(directory);
        spellChecker.indexDictionary(nameDictionary, config, true);

        for (String s : new String[]{"wafa", "waffa", "wala"}) {
            String suggestions[] = spellChecker.suggestSimilar(s, 10, null, null, SuggestMode.SUGGEST_MORE_POPULAR);
            System.out.println("Suggestions for " + s);
            for (String suggestion : suggestions)
                System.out.println(" -" + suggestion);
        }
    }
}
import org.apache.lucene.analysis.core.SimpleAnalyzer;
导入org.apache.lucene.document.document;
导入org.apache.lucene.document.Field;
导入org.apache.lucene.document.TextField;
导入org.apache.lucene.index.DirectoryReader;
导入org.apache.lucene.index.IndexWriter;
导入org.apache.lucene.index.IndexWriterConfig;
导入org.apache.lucene.search.spell.LuceneDictionary;
导入org.apache.lucene.search.spell.SpellChecker;
导入org.apache.lucene.search.spell.SuggestMode;
导入org.apache.lucene.store.Directory;
导入org.apache.lucene.store.RAMDirectory;
导入java.io.IOException;
导入java.util.LinkedList;
导入java.util.List;
公共类暗示测试{
静态公共void main(字符串args[])引发IOException{
最终字符串名称\u FIELD=“NAME”;
目录目录=新的RAMDirectory();
IndexWriter writer=新的IndexWriter(目录,
新的IndexWriterConfig(新的SimpleAnalyzer());
writer.deleteAll();
writer.commit();
列表=新建LinkedList();
对于(int i=0;i<1000;i++)
列表。添加(“wafa”);
列表。添加(“waffa”);
用于(字符串名称:列表){
单据单据=新单据();
doc.add(新文本字段(NAME_字段,NAME,FIELD.Store.YES));
writer.addDocument(doc);
}
writer.close();
DirectoryReader=DirectoryReader.open(目录);
LuceneDictionary NAME dictionary=新的LuceneDictionary(directoryReader,NAME_字段);
IndexWriterConfig config=newindexwriterconfig(newsimpleanalyzer());
拼写检查器拼写检查器=新拼写检查器(目录);
拼写检查器.indexDictionary(nameDictionary,config,true);
for(字符串s:新字符串[]{“wafa”、“waffa”、“wala”}){
字符串建议[]=拼写检查器.suggestSimular(s,10,null,null,SuggestMode.suggestmore\u POPULAR);
System.out.println(“对“+s的建议”);
对于(字符串建议:建议)
System.out.println(“-”+建议);
}
}
}
当我查找
Wafa
(目录中出现1000次)时,我不希望下面的代码提示我
Waffa