Lucene的deleteDocuments的一个疑问?

问题:

为什么调用了删除部分文档后,全部文档都找不到了?

项目已上传


索引文件:

/Users/mac/Lucene/data/data_04.txt
/Users/mac/Lucene/data/data_05.txt
/Users/mac/Lucene/data/data_02.txt
/Users/mac/Lucene/data/data_03.txt
/Users/mac/Lucene/data/data_01.txt

索引文档结构:

private Document getDocument(File file) throws IOException {
        Document document = new Document();
        // index file contents
        Field contentField = new Field(Constants.CONTENTS, new FileReader(file));
        // index file name
        Field fileNameField = new Field(Constants.FILE_NAME, file.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED);
        // index file path
        Field filePathField = new Field(Constants.FILE_PATH, file.getCanonicalPath(), Field.Store.YES, Field.Index.NOT_ANALYZED);
        // index file length
        Field fileLengthField = new Field(Constants.FILE_LENGTH, file.length() + "", Field.Store.YES, Field.Index.NOT_ANALYZED);
        document.add(contentField);
        document.add(fileNameField);
        document.add(filePathField);
        document.add(fileLengthField);
        return document;
}

创建文档方法:

private void indexFile(File file) throws IOException {
        log.info("Indexing -> " + file.getCanonicalPath());
        Document document = getDocument(file);
        writer.addDocument(document);
}

查询文档方法:

public TopDocs searchUsingPrefixQuery(String searchQuery) throws IOException {
        Term term = new Term(Constants.FILE_NAME, searchQuery);
        Query query = new PrefixQuery(term);
        return indexSearcher.search(query, Constants.MAX_SEARCH);
}

删除文档方法:

private void deleteFile(String name) throws IOException {
        writer.deleteDocuments(new PrefixQuery(new Term(Constants.FILE_NAME, name)));
        writer.commit();
}

测试入口及输出:

public static void main(String[] args) {
        Test tester;
        try {
            tester = new Test();
            tester.createIndex();
            tester.search("data");
            tester.deleteIndex("data_01.txt");
            tester.search("data");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
}
20:08:12.624 [main] INFO com.neo.code.lucene.demo01.Test - [searching files]: 5
20:08:12.634 [main] INFO com.neo.code.lucene.demo01.Test - [searching files]: 0
阅读 1.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题