我想使用目录作为RAMDirectory而不是FSDirectory来索引我的拼写检查程序。因为我已经创建了索引,所以我只想使用该用户索引来索引拼写检查器,但是我没有得到任何建议。exist
也返回0,所以我猜测索引无法正确创建。
try{
StandardAnalyzer analyzer = new StandardAnalyzer();
IndexWriterConfig config = new IndexWriterConfig(analyzer);
Directory directory = new RAMDirectory();
IndexWriter indexWriter = new IndexWriter(directory,config);
JSONArray documentArray = new JSONArray();
String[] fieldArray = {"field"};
JSONObject documentObj= new JSONObject();
documentObj.put("field", "KARNATAKA");
documentArray.put(documentObj);
JSONObject documentObj1= new JSONObject();
documentObj1.put("field", "KERALA");
documentArray.put(documentObj1);
for (int i = 0; i < documentArray.length(); i++)
{
JSONObject docObj = documentArray.getJSONObject(i);
Document doc = new Document();
for (int j = 0; j < fieldArray.length; j++)
{
doc.add(new Field(fieldArray[j], docObj.getString(fieldArray[j]), org.apache.lucene.document.TextField.TYPE_STORED));
}
indexWriter.addDocument(doc);
}
indexWriter.commit();
indexWriter.close();
DirectoryReader ireader = DirectoryReader.open(directory);
SpellChecker spellChecker = new SpellChecker(directory);
spellChecker.clearIndex();
spellChecker.indexDictionary(new LuceneDictionary(ireader, "field"), new IndexWriterConfig(new StandardAnalyzer()),true);
String[] suggestions = spellChecker.suggestSimilar("KANATAKA", 5);
System.out.println(spellChecker.exist("Karnataka".toUpperCase()));
if(suggestions.length > 0 )
System.out.println(suggestions[0]);
spellChecker.close();
}
catch(Exception e)
{
e.printStackTrace();
}
请帮助我可能做错了
最佳答案
SpellChecker.clearIndex()
的文档说:
从拼写检查索引中删除所有术语。
我看起来不是您要执行的操作。我会删除该行,或者可能会更好,只需将新目录用于拼写检查器索引,而不要使用与源索引相同的目录。
关于java - Lucene:使用RAMDictionary进行拼写检查似乎不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44881512/