【发布时间】:2014-01-03 02:40:17
【问题描述】:
我想删除 apache lucene 中只有完全匹配的文档。例如我有包含文本的文档:
Document1: Bilal
Document2: Bilal Ahmed
Doucument3: Bilal Ahmed - 54
当尝试使用查询“Bilal”删除文档时,它会删除所有这三个文档,而它应该只删除第一个完全匹配的文档。
我使用的代码是这样的:
String query = "bilal";
String field = "userNames";
Term term = new Term(field, query);
IndexWriter indexWriter = null;
File indexDir = new File(idexedDirectory);
Directory directory = FSDirectory.open(indexDir);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_46);
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_46, analyzer);
indexWriter = new IndexWriter(directory, iwc);
indexWriter.deleteDocuments(term);
indexWriter.close();
这就是我索引文档的方式:
File indexDir = new File("C:\\Local DB\\TextFiled");
Directory directory = FSDirectory.open(indexDir);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_46);
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_46, analyzer);
//Thirdly We tell the Index Writer that which document to index
indexWriter = new IndexWriter(directory, iwc);
int i = 0;
try (DataSource db = DataSource.getInstance()) {
PreparedStatement ps = db.getPreparedStatement(
"SELECT user_id, username FROM " + TABLE_NAME + " as au" + User_CONDITION);
try (ResultSet resultSet = ps.executeQuery()) {
while (resultSet.next()) {
i++;
doc = new Document();
text = resultSet.getString("username");
doc.add(new StringField("userNames", text, Field.Store.YES));
indexWriter.addDocument(doc);
System.out.println("User Name : " + text + " : " + userID);
}
}
【问题讨论】:
-
我还有一个问题,我在文档中添加了一个整数字段,例如 userID,例如: Document doc = new Document(); doc.add(doc.add(new IntField("userID", userID, Field.Store.YES)); 现在,如果我想搜索 id 为 1000 的文档,那么我将如何进行查询? String query = " 1000" 或其他方式?