我想使用目录将我的拼写检查器编入索引,因为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();
}
请帮助我可能做错了
答案 0 :(得分:1)
SpellChecker.clearIndex()
的文档说:
从拼写检查索引中删除所有条款。
我看起来不像你想做的那样。我删除了那一行,或者可能更好,只是使用拼写检索器索引的新目录,而不是使用与源索引相同的目录。