`
baobeituping
  • 浏览: 1068060 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Lucene 2 通过updateDocument更新索引

阅读更多
  1. package com.lucene;   
  2.   
  3. import java.io.IOException;   
  4.   
  5. import org.apache.lucene.analysis.standard.StandardAnalyzer;   
  6. import org.apache.lucene.document.Document;   
  7. import org.apache.lucene.document.Field;   
  8. import org.apache.lucene.index.IndexWriter;   
  9. import org.apache.lucene.index.Term;   
  10. import org.apache.lucene.queryParser.QueryParser;   
  11. import org.apache.lucene.search.Hits;   
  12. import org.apache.lucene.search.IndexSearcher;   
  13. import org.apache.lucene.search.Query;   
  14.   
  15. public class UpdateDocument {   
  16.        
  17.     private static String path = "d:/index";   
  18.        
  19.        
  20.     public static void main(String[] args){   
  21. //      addIndex();   
  22.         updateIndex();   
  23.         search("李四");   
  24.         search("王五");   
  25.     }   
  26.        
  27.     public static void addIndex(){   
  28.         try {   
  29.             IndexWriter write = new IndexWriter(path,new StandardAnalyzer(),true);   
  30.                
  31.             Document doc = new Document();   
  32.             doc.add(new Field("id","123456",Field.Store.YES,Field.Index.UN_TOKENIZED));   
  33.             doc.add(new Field("userName","张三",Field.Store.YES,Field.Index.TOKENIZED));   
  34.             doc.add(new Field("comefrom","北京",Field.Store.YES,Field.Index.TOKENIZED));   
  35.                
  36.             write.addDocument(doc);   
  37.                
  38.             write.close();   
  39.                
  40.         } catch (IOException e) {   
  41.             e.printStackTrace();   
  42.         }   
  43.     }   
  44.        
  45.        
  46.     public static void updateIndex(){   
  47.         try {   
  48.                
  49.             IndexWriter write = new IndexWriter(path,new StandardAnalyzer(),false);   
  50.             Document docNew = new Document();   
  51.             docNew.add(new Field("id","123456",Field.Store.YES,Field.Index.UN_TOKENIZED));   
  52.             docNew.add(new Field("userName","王五",Field.Store.YES,Field.Index.TOKENIZED));   
  53.             Term term = new Term("id","123456");   
  54.             /**  
  55.               调用updateDocument的方法,传给它一个新的doc来更新数据,  
  56.               Term term = new Term("id","1234567");  
  57.               先去索引文件里查找id为1234567的Doc,如果有就更新它(如果有多条,最后更新后只有一条)。如果没有就新增.  
  58.                
  59.               数据库更新的时候,我们可以只针对某个列来更新,而lucene只能针对一行数据更新。  
  60.              */  
  61.             write.updateDocument(term, docNew);   
  62.                
  63.             write.close();   //注意在这里一定要关闭write
  64.                
  65.         } catch (IOException e) {   
  66.             e.printStackTrace();   
  67.         }   
  68.     }   
  69.   
  70.     public static Query queryParser(String str){   
  71.         QueryParser queryParser = new QueryParser("userName"new StandardAnalyzer());   
  72.         try {   
  73.             Query query =  queryParser.parse(str);   
  74.             return query;   
  75.         } catch (Exception e) {   
  76.             e.printStackTrace();   
  77.         }   
  78.         return null;   
  79.     }   
  80.        
  81.     public static void search(String str){   
  82.         try {   
  83.             IndexSearcher search = new IndexSearcher(path);   
  84.                
  85.             Query query = queryParser(str);   
  86.                
  87.             Hits hits = search.search(query);   
  88.             if(hits==null){   
  89.                 return;   
  90.             }   
  91.             if(hits.length() == 0){   
  92.                 System.out.println(" 没有搜索到'" + str+"'");   
  93.                 return;   
  94.             }   
  95.             for (int i = 0; i < hits.length(); i++) {   
  96.                 Document doc = hits.doc(i);   
  97.                 System.out.println("id = "+hits.id(i));   
  98.                 System.out.println("own id = " + doc.get("id"));   
  99.                 System.out.println("userName = "+doc.get("userName"));   
  100.                 System.out.println("come from  = "+doc.get("comefrom"));   
  101.                 System.out.println("");   
  102.             }   
  103.                
  104.         } catch (Exception e) {   
  105.             e.printStackTrace();   
  106.         }   
  107.     }   
  108.   
  109. }  
分享到:
评论

相关推荐

    lucene分词搜索,增量索引及全量索引

    IndexWriter提供了如addDocument()和updateDocument()的方法,用于处理单个文档的增删改操作。 三、全量索引 全量索引则是对所有数据重新构建索引的过程。在系统启动时、数据库初始化或数据发生重大变化时,全量...

    Lucene5写的全文搜索的demo,包括创建索引和搜索

    Lucene 提供了 `IndexWriter` 的 `updateDocument()` 方法来替换现有文档。 总结,Lucene5 全文搜索 demo 展示了如何利用 Lucene 的核心组件创建和搜索索引。从索引的构建到查询的执行,每个步骤都涉及到对 Lucene ...

    lucene索引的简单使用

    1. **更新与删除**:Lucene提供了updateDocument和deleteDocuments方法来更新已存在的文档或删除指定的文档。 2. **性能优化**:可以通过设置批处理大小、使用多线程、利用缓存等方式优化索引和查询性能。 3. **...

    Lucene.net建立索引,检索分页Demo

    - 增量索引:当新数据到来时,无需重新构建整个索引,而是使用 IndexWriter 的 UpdateDocument 或 AddDocument 方法更新已存在的索引。 - 倒排索引:Lucene 使用倒排索引来加速搜索,每个词项对应一组包含它的文档...

    Lucene实战源码(Lucene in Action Source Code)part2

    8. **更新和删除(Update & Delete)**:Lucene支持对索引的动态更新和删除操作,保持数据的实时性。 在《Lucene in Action Source Code》part2中,你可以找到以下示例: - **workspace**:这是一个开发工作区,...

    lucene.net实例

    在 Lucene.NET 中,可以通过 IndexWriter 类的 AddDocument 和 UpdateDocument 方法来实现增量索引。 **3. 更新索引** 更新索引涉及到已存在文档的更改。Lucene.NET 不直接支持文档级别的更新,而是采用删除旧文档...

    lucene整理文档,lucene详细描述,安装使用过程。

    同时,通过 IndexWriter 的 updateDocument 方法,可以更新已存在的文档。 **Lucene 的扩展与应用** Lucene 本身只是一个核心库,实际应用中通常会结合 Solr 或 Elasticsearch 这样的搜索引擎服务器。它们提供了更...

    lucene-3.02

    5. **更新与删除**:当文档内容改变或需要删除时,IndexWriter提供了相应的updateDocument和deleteDocuments方法。 四、优化与进阶 1. **分片与分布式搜索**:对于大规模数据,可以通过分片技术将索引分散到多台...

    C#调用Lucene方法-实现快速搜索

    Lucene提供了Optimize方法用于合并段以提高性能,而UpdateDocument方法可以替换已存在的文档。 6. **错误处理和资源释放**:在使用完毕后,记得关闭所有打开的流和对象,如IndexWriter、IndexReader、Searcher等,...

    lucene的封装和性能优化

    public void updateDocument(String id, Document doc) {...} public void deleteDocument(String id) {...} } public class QueryParser { public Query parse(String queryText) {...} } public class Search...

    solr增量导入更新索引包

    - **Update Handler**:Solr提供了多种Update Handler,例如Direct Update Handler和Document Update Handler,它们接收单个文档或者批量文档的更新请求,然后进行相应的索引更新,而无需重新构建整个索引。...

    lucene4.4 Demo事例

    - 或者,如果支持,直接使用`IndexWriter`的`updateDocument`方法,通过一个`Term`来定位文档,并提供新的`Document`替换。 6. **分页查询** - 使用`TopScoreDocCollector`或`TopDocsCollector`收集指定数量的...

    基于lucene搜索引擎的java源码

    源码中可能使用了`IndexWriter.addDocument()`或`IndexWriter.updateDocument()`方法,前者用于添加新文档,后者用于更新已存在的文档。 3. **搜索(Searching)**:`IndexSearcher`和`QueryParser`类是进行搜索的...

    Lucene-2.3.1 源代码阅读学习

    - **UpdateDocument**:替换已存在文档,而不是删除后再新建,节省空间和时间。 6. **内存与磁盘结构** - **FieldCache**:缓存文档字段值,提高查询速度,但需注意内存使用。 - **RAMDirectory**:内存中的索引...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-15.Lucene高级进阶1 共23页.pptx

    4. **更新索引中的Document**:介绍了如何在不重建整个索引的情况下更新已存在的Document,利用`IndexWriter`的`updateDocument()`方法。 5. **分页搜索**:由于Lucene的查询特性,需要实现分页查询策略,通常先...

    lucene4.6例子

    如果已有文档需要更新,可以使用`updateDocument()`方法。 4. 提交更改:所有文档添加完成后,使用`commit()`方法保存索引,确保数据持久化。 二、执行查询 Lucene提供了一个强大的查询解析器,能将用户输入的...

    lucene源码和程序

    8. **更新与删除(Update & Delete)**:一旦索引建立,可以添加新文档,更新已有文档,甚至删除不再需要的文档。 在`lucene-1.4-final`这个压缩包中,包含了Lucene 1.4版本的源代码,你可以深入研究其内部实现,...

    最新Lucene5.2.1实例(带Jar包)

    7. **更新和删除索引**: 如果需要修改已索引的数据,可以使用`IndexWriter`的`updateDocument()`方法。同样,如果要删除某个文档,可以使用`deleteDocuments()`方法,传入相应的查询条件。 Lucene 5.2.1 版本还引入...

    Lucene全文检索案例

    使用`IndexWriter`的`updateDocument()`方法可以替换现有文档,而`deleteDocuments()`方法允许删除匹配特定查询条件的文档。 7. **优化与性能** 为了提高检索性能,可以定期执行索引合并(`optimize()`),但这...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-16.Lucene高级进阶2 共4页.pptx

    当需要更新已有索引中的某个文档时,我们不能直接修改,而是需要创建一个新的Document对象,并使用`writer.updateDocument()`方法。例如,以下代码片段展示了如何更新一个文档: ```java IndexWriterConfig iwc = ...

Global site tag (gtag.js) - Google Analytics