package com.lucene;
import java.io.IOException;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
public class UpdateDocument {
private static String path = "d:/index";
public static void main(String[] args){
// addIndex();
updateIndex();
search("李四");
search("王五");
}
public static void addIndex(){
try {
IndexWriter write = new IndexWriter(path,new StandardAnalyzer(),true);
Document doc = new Document();
doc.add(new Field("id","123456",Field.Store.YES,Field.Index.UN_TOKENIZED));
doc.add(new Field("userName","张三",Field.Store.YES,Field.Index.TOKENIZED));
doc.add(new Field("comefrom","北京",Field.Store.YES,Field.Index.TOKENIZED));
write.addDocument(doc);
write.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void updateIndex(){
try {
IndexWriter write = new IndexWriter(path,new StandardAnalyzer(),false);
Document docNew = new Document();
docNew.add(new Field("id","123456",Field.Store.YES,Field.Index.UN_TOKENIZED));
docNew.add(new Field("userName","王五",Field.Store.YES,Field.Index.TOKENIZED));
Term term = new Term("id","123456");
/**
调用updateDocument的方法,传给它一个新的doc来更新数据,
Term term = new Term("id","1234567");
先去索引文件里查找id为1234567的Doc,如果有就更新它(如果有多条,最后更新后只有一条)。如果没有就新增.
数据库更新的时候,我们可以只针对某个列来更新,而lucene只能针对一行数据更新。
*/
write.updateDocument(term, docNew);
write.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static Query queryParser(String str){
QueryParser queryParser = new QueryParser("userName", new StandardAnalyzer());
try {
Query query = queryParser.parse(str);
return query;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void search(String str){
try {
IndexSearcher search = new IndexSearcher(path);
Query query = queryParser(str);
Hits hits = search.search(query);
if(hits==null){
return;
}
if(hits.length() == 0){
System.out.println(" 没有搜索到'" + str+"'");
return;
}
for (int i = 0; i < hits.length(); i++) {
Document doc = hits.doc(i);
System.out.println("id = "+hits.id(i));
System.out.println("own id = " + doc.get("id"));
System.out.println("userName = "+doc.get("userName"));
System.out.println("come from = "+doc.get("comefrom"));
System.out.println("");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
这个过程涉及到的关键知识点包括:Lucene.NET的安装与引用、索引的创建与更新、查询的构建与执行以及结果的处理。通过熟练掌握这些,你将能构建出强大的搜索系统,满足用户对快速、精准搜索的需求。
如果已有索引,可以使用`updateDocument()`更新已有文档。 4. **关闭索引(Closing the Index)**: 添加完所有文档后,别忘了调用`IndexWriter.close()`来确保索引被正确地写入磁盘。 **三、查询索引(Searching)...
这个“lucene增删改查小demo”涵盖了 Lucene 搜索库的基础操作,通过 IndexWriter 进行索引管理,使用 QueryParser 构建查询,IndexSearcher 执行查询,并通过 Document 实现数据的读写。掌握这些基本操作后,你可以...
- **更新文档**:可以通过 `IndexWriter.updateDocument(Term, Document)` 方法替换现有文档,使用 `Term` 来定位要更新的文档。 - **删除文档**:使用 `IndexWriter.deleteDocuments(Term)` 或 `IndexWriter....
indexWriter.updateDocument(term, doc); /**optimize()方法是对索引进行优化 **/ indexWriter.optimize(); indexWriter.close(); } /** * 创建索引(多个) * @param list * @throws Exception ...
你可以通过 `IndexWriter` 的 `updateDocument()` 方法更新已存在的文档,或使用 `deleteDocuments()` 删除指定的文档。 **5. 分析器的改进** 在 Lucene 3.0 中,分析器(Analyzer)进行了重大改进,包括对 Unicode...
你可以通过`IndexWriter`的`addDocument()`方法添加新的文档,或者使用`updateDocument()`方法替换已存在的文档。"删除"操作则可以使用`deleteDocuments()`方法,传入一个`Term`对象来标识要删除的文档。 ```java /...
4. **优化与更新(Optimization & Updates)**:索引优化(`indexWriter.optimize()`)可以合并索引段以提高搜索效率,但不总是必需的。如果要更新或删除文档,需先获取旧文档的 `Document`,然后使用 `indexWriter....
- **修改(Update)**:更新文档通常需要先删除旧文档,再添加新文档。使用`IndexWriter`的`deleteDocuments()`方法删除后,再调用`addDocument()`添加更新后的文档。 - **查询(Search)**:使用`IndexSearcher`...
4. **更新(Update)**: 更新文档时,可以先查询出需要更新的文档,然后修改其属性,最后再次保存。或者,使用`UpdateRequest`直接指定要更新的字段。 **依赖管理** 在 Maven 或 Gradle 项目中,需要添加以下依赖...
更新索引涉及到删除已有的文档并重新添加。在Lucene中,更新通常意味着先删除再创建新的索引。使用`IndexWriter`的`deleteDocuments()`方法可以删除特定文档。 ```java indexWriter.deleteDocuments(new Term("id",...
通过以上步骤,你就成功地在SpringBoot应用中整合了Lucene,实现了数据库与Lucene索引的双向同步。用户可以通过输入查询文本,调用`LuceneSearchService`进行全文检索,获取相关的文章结果。 在实际项目中,你可能...
Elasticsearch(简称ES)是一种基于Lucene的分布式、RESTful搜索分析引擎,广泛应用于大数据检索、日志分析、实时监控等领域。在C#开发环境中,我们可以借助Nest或Elasticsearch.Net这两个官方支持的客户端库来与ES...
- **更新文档**:使用`UpdateDocument`方法。 ```csharp var updateRequest = new UpdateRequest<MyDocument, object>("your_index", "1") { Script = new Script("ctx._source.title = 'Updated Title'") };...
本文将深入探讨两种流行的全文检索引擎——Apache Solr和Elasticsearch,并通过Java客户端代码示例来阐述它们的基本操作,包括增加、删除、修改和查询。 ### 一、Apache Solr **1. Solr简介** Apache Solr 是一个...
- **更新和删除**:同样,SolrNet提供了Update和Delete方法来更新或删除索引中的文档。 4. **Solr的高级特性** - **Faceting**:允许用户对搜索结果进行分类,如按类别、品牌等维度统计。 - **Highlighting**:...
NEST(Nest ElasticSearch Client)是官方支持的、完全功能完备的 .NET 客户端,用于与 Elasticsearch 进行交互。NEST 提供了一种类型安全、面向对象的方式来操作 Elasticsearch 的 API,使得开发者可以更轻松地集成...
Lucene is a full-text search library that allows adding documents to an index through an `IndexWriter`. Each document consists of a collection of fields, and there are no configuration files required...
2.1.6. 查询 ACL 2.2. 精细的访问控制 2.2.1. 精细的访问控制 2.2.2. 除去访问控制 2.3. 高级用法 2.3.1. 保存 ACL 数据确保持久性 2.3.2. 使用声明(Assert)来编写条件性的 ACL 规则 3. Zend_Auth 3.1. 简介...