不能删除文件索引

时间:2017-02-16 09:06:24

标签: java lucene

我为luence建立了一个搜索索引:

Field idField = new Field("_id", "58369c7e0293a47b09d34605", Field.Store.YES, Field.Index.NO);
Field tagField = new Field("tag", joinListStr(gifModel.getTags()), Field.Store.YES, Field.Index.ANALYZED);
Field textField = new Field("text", gifModel.getText(), Field.Store.NO, Field.Index.ANALYZED);
doc.add(idField);
doc.add(tagField);
doc.add(textField);
iwriter.addDocument(doc);

我希望Term通过_id字段删除该文档,然后点击this article

public Map<String, Object> deleteIndexByMongoId(String id) {
        try {
            Directory directory = FSDirectory.open(new File(GifMiaoMacro.LUCENE_INDEX_FILE));
            IndexReader indexReader = IndexReader.open(directory);
            Term term = new Term("_id", id);
            int num = indexReader.deleteDocuments(term);
            indexReader.close();
            return new ReturnMap(num);
        }catch (IOException e){
            e.printStackTrace();
            return new ReturnMap(GifError.S_DELETE_INDEX_ERR, "delete index error");
        }
    }

但是这里num allways是0并且搜索结果显示文档仍然在搜索索引中,我错过了什么?

修改

indexReader更改为indexWriter仍无法正常工作

public Map<String, Object> deleteIndexByMongoId(String id) {
        try {
            Directory directory = FSDirectory.open(new File(GifMiaoMacro.LUCENE_INDEX_FILE));
            IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_CURRENT, new SmartChineseAnalyzer(Version.LUCENE_CURRENT));
            IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
            Term term = new Term("_id", id);
            indexWriter.deleteDocuments(term);
            indexWriter.close();
            return new ReturnMap(0);
        }catch (IOException e){
            e.printStackTrace();
            return new ReturnMap(GifError.S_DELETE_INDEX_ERR, "delete index error");
        }
    }

1 个答案:

答案 0 :(得分:0)

你使用的是什么版本的Lucene? IndexReader.deleteDocuments已不复存在。它在Lucene 3.6之后被删除。无论哪种方式都使用IndexWriter类。

    Directory directory = FSDirectory.open(new File(GifMiaoMacro.LUCENE_INDEX_FILE));
    IndexWriterConfig indexWriterConfig = new IndexWriterConfig(new SimpleAnalyzer());
    IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
    Term term = new Term("_id", id);
    indexWriter.deleteDocuments(term);

IndexWriter.deletedocuments(term)

      Field idField = new Field("_id", "58369c7e0293a47b09d34605", Field.Store.YES, Field.Index.NO);

似乎你已经使id字段无法索引。因此即使存储它也无法搜索。您必须使用可从索引中搜索的字段。