现在已经苦了两天,只是不能删除文件 indexWriter.deleteDocuments(term)
在这里,我将放置将进行测试的代码,希望有人可以指出我做错了的事情,以及已经尝试过的事情:
2.x
为5.x
indexWriter.deleteDocuments()
代替indexReader.deleteDocuments()
indexOption
配置为NONE
或DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS
这里的代码:
import org.apache.lucene.analysis.core.SimpleAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.FieldType;
import org.apache.lucene.index.*;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import java.io.IOException;
import java.nio.file.Paths;
public class TestSearch {
static SimpleAnalyzer analyzer = new SimpleAnalyzer();
public static void main(String[] argvs) throws IOException, ParseException {
generateIndex("5836962b0293a47b09d345f1");
query("5836962b0293a47b09d345f1");
delete("5836962b0293a47b09d345f1");
query("5836962b0293a47b09d345f1");
}
public static void generateIndex(String id) throws IOException {
Directory directory = FSDirectory.open(Paths.get("/tmp/test/lucene"));
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter iwriter = new IndexWriter(directory, config);
FieldType fieldType = new FieldType();
fieldType.setStored(true);
fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS);
Field idField = new Field("_id", id, fieldType);
Document doc = new Document();
doc.add(idField);
iwriter.addDocument(doc);
iwriter.close();
}
public static void query(String id) throws ParseException, IOException {
Query query = new QueryParser("_id", analyzer).parse(id);
Directory directory = FSDirectory.open(Paths.get("/tmp/test/lucene"));
IndexReader ireader = DirectoryReader.open(directory);
IndexSearcher isearcher = new IndexSearcher(ireader);
ScoreDoc[] scoreDoc = isearcher.search(query, 100).scoreDocs;
for(ScoreDoc scdoc: scoreDoc){
Document doc = isearcher.doc(scdoc.doc);
System.out.println(doc.get("_id"));
}
}
public static void delete(String id){
try {
Directory directory = FSDirectory.open(Paths.get("/tmp/test/lucene"));
IndexWriterConfig config = new IndexWriterConfig(analyzer);
IndexWriter iwriter = new IndexWriter(directory, config);
Term term = new Term("_id", id);
iwriter.deleteDocuments(term);
iwriter.commit();
iwriter.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
首先generateIndex()
将在中生成索引/tmp/test/lucene
,并
query()
显示id
将成功查询该索引,然后delete()
希望删除该文档,但query()
再次将证明删除操作失败。
这是pom依赖关系,以防有人可能需要测试
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>5.5.4</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>5.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>5.5.4</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-smartcn</artifactId>
<version>5.5.4</version>
</dependency>
渴望得到答案。
您的问题出在分析仪中。SimpleAnalyzer
将标记定义为 字母的
最大字符串(StandardAnalyzer
或什至WhitespaceAnalyzer
是更典型的选择),因此要索引的值将分为多个标记:“ b”,“
a”,“ b”,“ d”,“
f”。您定义的delete方法虽然不会通过分析器,但只会创建一个原始术语。如果您尝试将其替换为以下内容,则可以看到它的作用main
:
generateIndex("5836962b0293a47b09d345f1");
query("5836962b0293a47b09d345f1");
delete("b");
query("5836962b0293a47b09d345f1");
通常,查询和术语等 不 进行分析,而QueryParser进行分析。
对于(看起来像)标识符字段,您可能根本不想分析此字段。在这种情况下,请将其添加到FieldType中:
fieldType.setTokenized(false);
然后,您将不得不更改查询(再次进行QueryParser分析),并TermQuery
改为使用。
Query query = new TermQuery(new Term("_id", id));
问题内容: 我一直在尝试删除我的excel文件中的空行的代码!我的代码是: 该代码完全无效。有谁能告诉我是什么问题,请帮助我,自最近10个小时以来,我一直在尝试做这件事。提前致谢! 问题答案: 当任何行为空白时,将有两种情况。 首先,该行位于其他行之间,但永远不会初始化或创建。在这种情况下, Sheet.getRow(i)将为null。 其次,行已创建,其单元格可能会或可能不会被使用,但现在其所有
问题内容: 我必须从指定的路径中删除属性文件。我使用以下代码: 返回false。 但是成功删除了一个文本文件而不是属性文件。 问题答案: 失败的原因有两个: 这是一个目录,不能为空 您没有操作系统权限才能删除文件 该文件仍在某处打开 最后一个可能是您自己的错误,如果您为该文件打开了FileInput / OutputStream却忘记了将其关闭。
嗨,我试图简单地从使用猫鼬的集合中删除一个文档,但由于一些奇怪的原因,我无法让它工作。 代码如下: 有人能帮我解释一下语法吗?我知道_id被存储为新的ObjectId(“5214f4050acb53fe31000004”),但我试过了却没有乐趣? 谢谢
问题内容: 我有这个代码 当我执行它时,它说 java.nio.file.FileSystemException 该进程无法访问文件,因为该文件正在被另一个进程使用(在sun.nio.fs.WindowsException中) 在我有这个: 我想删除文件“ SHA1.txt”。我怎样才能做到这一点? 问题答案: 我猜想您打开阅读它,而您却忘了关闭它。 编辑: 根据您的评论,您在中包含以下行: 因此
当我转到produkdelete.php时,我可以查看我想要删除的记录,但是当我确认删除时,没有删除的记录 这是我的剧本: 关键变量是从"produkdelete.php?key=". urlencode($row["id"])发送; 每次我运行它时,输出都是这样的: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“=”附近要使用的正确语法
我正在使用gradle构建一个Spring Boot应用程序,我希望从war中删除文件,因为该文件将从外部加载(它运行在tomcat容器中,而不是嵌入式的)。 我查看了StackOverflow和Gradle文档,试图找出该做什么,但我不知道该绑定到哪个阶段,以及在创建war之前还是之后排除该文件。处理文件似乎也有多种方法。 我相信Maven使用作为等价物。