Java lucene删除文件不工作
我想删除文档,但是deleteDocuments方法不起作用。文档仍然是一样的。有什么问题吗?您打开了一个新的Java lucene删除文件不工作,java,lucene,Java,Lucene,我想删除文档,但是deleteDocuments方法不起作用。文档仍然是一样的。有什么问题吗?您打开了一个新的索引阅读器来执行第二次搜索,这很好,但您将旧的阅读器传递给搜索器。在运行搜索时,您还使用了旧的搜索程序,而不是新的搜索程序 // Directory indexDir = new SimpleFSDirectory(new File("D:" + File.separator + "testindex")); Directory indexDir = ne
索引阅读器来执行第二次搜索,这很好,但您将旧的阅读器传递给搜索器。在运行搜索时,您还使用了旧的搜索程序,而不是新的搜索程序
// Directory indexDir = new SimpleFSDirectory(new File("D:" + File.separator + "testindex"));
Directory indexDir = new RAMDirectory();
System.out.println("当前lucene的版本号是---" + Version.LUCENE_45);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_45);
// 写索引的配置
IndexWriterConfig writerConfig = new IndexWriterConfig(Version.LUCENE_45, analyzer);
// 每一次都会进行创建新的索引,第二次删掉原来的创建新的索引
writerConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);
IndexWriter indexWriter = new IndexWriter(indexDir, writerConfig);
Document document = new Document();
Field stringField = new TextField("int1", "hello lucky boy", Store.YES);
Reader reader = new StringReader("hello lucky boy");
/** ****************创建索引时查看分词的结果************* ****** */
TokenStream tokenStream = analyzer.tokenStream("", reader);
tokenStream.reset();
CharTermAttribute charTermAttr = tokenStream.getAttribute(CharTermAttribute.class);
System.out.println("tokenStream......" + tokenStream);
System.out.print("....分词开始....");
while (tokenStream.incrementToken())
{
System.out.print(charTermAttr + "----");
}
System.out.print("....分词结束....");
document.add(stringField);
indexWriter.addDocument(document);
indexWriter.close();
/*******查询term********/
IndexReader indexReader = DirectoryReader.open(indexDir);
IndexSearcher searcher = new IndexSearcher(indexReader);
TopDocs docs = searcher.search(new TermQuery(new Term("int1", "boy")), 10);
ScoreDoc[] hits = docs.scoreDocs;
System.out.println("......");
if(null != hits)
{
System.out.println("...存在查询的结果..."+hits.length);
for(ScoreDoc hit : hits)
{
System.out.println("命中的结果是......"+hit);
Document doc = searcher.doc(hit.doc);
System.out.println("查询出来的field是......"+doc.get("int1"));
}
}
/** *********更新索引文件document********* */
System.out.println("...更新索引文件开始...");
Term term = new Term("int1", "lucky");
IndexWriterConfig writerConfig2 = new IndexWriterConfig(Version.LUCENE_45, analyzer);
IndexWriter indexWriter2 = new IndexWriter(indexDir, writerConfig2);
// indexWriter2.updateDocument(term, document);
indexWriter2.deleteDocuments(term);
indexWriter2.close();
System.out.println("......" + document);
System.out.println("...跟新索引文件结束...");
/** **********跟新索引文件结束**** */
/**********update/delete之后的操作*********/
IndexReader indexReaderUpdate = DirectoryReader.open(indexDir);
IndexSearcher searcherUpdate = new IndexSearcher(indexReader);
TopDocs docsUpdate = searcher.search(new TermQuery(new Term("int1", "hello")), 10);
ScoreDoc[] hitsUpdate = docsUpdate.scoreDocs;
System.out.println("...跟新之后的Search操作...");
if(null != hitsUpdate)
{
System.out.println("...跟新之后存在查询的结果...");
for(ScoreDoc hit : hitsUpdate)
{
System.out.println("命中的结果是......"+hit);
Document doc = searcher.doc(hit.doc);
System.out.println("查询出来的field是......"+doc.get("int1"));
}
}
那么这个,
public final void removeReaderClosedListener(IndexReader.ReaderClosedListener listener)
应该是:
IndexReader indexReaderUpdate = DirectoryReader.open(indexDir);
// Use indexReaderUpdate here, instead of indexReader
IndexSearcher searcherUpdate = new IndexSearcher(indexReader);
// Use searcherUpdate here, instead of searcher
TopDocs docsUpdate = searcher.search(new TermQuery(new Term("int1", "hello")), 10);
您希望删除哪个文档
?我没有看到int1
字段被设置为lucky
。只有一个Docuemnt,Document Document=new Document();Field stringField=新文本字段(“int1”,“你好,幸运儿”,Store.YES);我想删除这个。怎么做如果你通过了新学期(“int1”,“你好,幸运儿”)
到删除文档
?我用这两个更改测试了您的代码,文档被成功删除,并且没有在搜索结果中返回。您做了这两项更改吗?对不起,这是我的错误。但是,关于indexWriter2还有一个问题。updateDocument(术语,文档);。好像不行。你能给我举个例子吗?
IndexReader indexReaderUpdate = DirectoryReader.open(indexDir);
// Use indexReaderUpdate here, instead of indexReader
IndexSearcher searcherUpdate = new IndexSearcher(indexReader);
// Use searcherUpdate here, instead of searcher
TopDocs docsUpdate = searcher.search(new TermQuery(new Term("int1", "hello")), 10);
IndexReader indexReaderUpdate = DirectoryReader.open(indexDir);
IndexSearcher searcherUpdate = new IndexSearcher(indexReaderUpdate);
TopDocs docsUpdate = searcherUpdate.search(new TermQuery(new Term("int1", "hello")), 10);