Lucene:使用RAMDictionary进行拼写检查似乎不起作用

时间:2017-07-03 09:00:01

标签: java lucene lucene.net spell-checking

我想使用目录将我的拼写检查器编入索引,因为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();
    }

请帮助我可能做错了

1 个答案:

答案 0 :(得分:1)

SpellChecker.clearIndex()的文档说:

  

从拼写检查索引中删除所有条款。

我看起来不像你想做的那样。我删除了那一行,或者可能更好,只是使用拼写检索器索引的新目录,而不是使用与源索引相同的目录。