我想使用目录作为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/

10-12 00:31