java - luence中无法删除文档索引

标签 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 始终是 0搜索结果显示该文档仍在搜索索引中,我错过了什么?

编辑

更改 indexReaderindexWriter仍然无法正常工作

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");
        }
    }

最佳答案

您使用的是哪个版本的 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 字段设置为不可索引。所以即使存储了也无法搜索到。您必须使用可从索引中搜索的字段。

关于java - luence中无法删除文档索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42269317/

相关文章:

elasticsearch - elasticsearch对象的最佳大小是多少

java - SAML - Java 中的服务提供者

php mysql 搜索引擎

java - Elasticsearch postfiler 取消过滤器

search - Elasticsearch 聚合列表中的二级排序

java - 在elasticsearch相似性实现中无法覆盖ClassicSimilarity中的scorePayload函数

java - Derby , XML 数据 , 长度

java - 它们真的是虚拟代码吗?

java - 在 Java 中将字符串转换为 long 时出现 NumberFormatExpression 错误

使用简单返回的 Java xml 解析 ???而不是希腊字母