`
sunlujing
  • 浏览: 179695 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

lucene的事务性引发的问题

阅读更多
终于ok了。。先开心一下。

我的问题和调试经历。
     我使用lucene 为数据库建立索引,在初期的测试中,对数据进行增删改查我并没有使用缓存,而是直接用indexWriter进行commit。结果每一次commit后我马上进行搜索,结果就是不出来。我查看index 文件,每一次都已进行了更新。于是我确定commit后,index已经同步了。可是为什么就是搜索不到结果了?????

      我每一次重新启动程序,上一次修改的结果都能被搜索得到,这就说明了搜索本身没有问题,。问题的关键就是,存在某个问题,使索引更新的效果对我不可以见,宝贵的周五就这样浪费了。由于周六周日要兼职。没空。。所以问题一直搁浅到现在。

救赎之道
      我现在发现学习一样东西基础越来越重要,要不然一个小小的错误会耽误你N多的时间,并且你毫无头绪下手。于是我决定看 lucence3.0 原理分析这个神级 pdf(网络上有下)。看完关于lucene事物性的解析后,。我相信我找到了救赎之道。

        原文如下:

        所谓事务性,本多指数据库的属性,包括ACID四个基本要素:原子性(Atomicity)、一致性
(Consistency)、隔离性(Isolation)、持久性(Durability)。
我们这里主要讨论隔离性,Lucene的IndexReader和IndexWriter具有隔离性。
• 当IndexReader.open打开一个索引的时候,相对于给当前索引进行了一次snapshot,此后的任何修改
都不会被看到。
• 仅当IndexReader.open打开一个索引后,才有可能看到从上次打开后对索引的修改。
• 当IndexWriter没有调用Commit的时候,其修改的内容是不能够被看到的,哪怕IndexReader被重新
打开。
欲使最新的修改被看到,一方面IndexWriter需要commit,一方面IndexReader重新打开。  
   
      我查看我的元代码:

       public static TopDocs search(String queryStr){  
    TopDocs docs = null;
try{
if(searcher == null) {  
            indexFile = new File(index_dir);  
searcher = new IndexSearcher(FSDirectory.open   (indexFile));    

          
        }  
        searcher.setSimilarity(new IKSimilarity());
       
        QueryParser parser = new QueryParser(Version.LUCENE_30,"content",new IKAnalyzer());  
        Query query = parser.parse(queryStr);  
        TopDocs topDocs = searcher.search(query, 100);  
          
        return topDocs;  
}catch(Exception e){
logger.error(SearchService.class+" search "+e.getMessage());
e.printStackTrace();
return docs;
}
}

      
private static Searcher searcher = null; 
        问题就是出在这里,第一次搜索的结果总是正确的。。之后要是做了修改都搜索不到,因为全局变量维护着search,而search 只是第一次打开index时候的snapshot.

  痛苦的领悟

          学习东西,基础才是王道!
0
1
分享到:
评论

相关推荐

    lucene实现过程中存在的问题

    5. **系统兼容性问题**:在不同的操作系统上,Lucene的表现可能不同。比如,在Windows XP系统中使用Lucene时,可能不会出现像Linux那样的文件系统锁定问题,但在Linux环境下却会出现这种情况。 #### 三、解决方法 ...

    Lucene 字符编码问题

    在使用Lucene时,可能会遇到字符编码问题,这通常是由于不同系统或程序之间处理字符集的方式不一致导致的。下面将详细探讨Lucene中的字符编码问题及其解决方案。 首先,我们要理解什么是字符编码。字符编码是将字符...

    lucene,lucene教程,lucene讲解

    lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....

    lucene3.0 lucene3.0

    lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0

    Lucene简介.介绍

    虽然 Lucene 的原始版本主要是为英文设计的,但其设计的灵活性使得通过扩展语言分析接口,可以轻松地添加对中文等其他语言的支持。这通常涉及使用词库和自动切分词算法来处理中文的分词问题。 **应用场景** 许多...

    lucene-4.7.0全套jar包

    使用这些JAR包时,开发者需要根据具体需求选择合适的模块,并确保它们的版本一致,以避免潜在的兼容性问题。同时,还需要正确配置分词器,以适应所处理的文本内容。此外,对于大型应用,可能还需要结合Solr或Elastic...

    Lucene时间区间搜索

    **正文** Lucene是一款强大的全文搜索引擎库,广泛应用于各种数据检索场景。...合理地利用这些技术,可以有效地提升数据检索的效率和准确性。在实际应用中,还需要结合具体业务需求和数据特性进行优化。

    lucene in action源码

    通过深入研究《Lucene in Action》的源码,开发者不仅可以理解Lucene的基本工作原理,还能学习如何实际应用这些知识,解决具体的搜索问题。对于初学者而言,这是一个很好的起点,可以帮助他们快速上手并逐步掌握全文...

    Annotated Lucene 中文版 Lucene源码剖析

    《Annotated Lucene 中文版 Lucene源码剖析》是一本深入探讨Apache Lucene的书籍,专注于源码解析,帮助读者理解这个强大的全文搜索引擎库的工作原理。Lucene是一款开源的Java库,它提供了高效的文本搜索功能,被...

    lucene in action英文版 lucene 3.30包

    《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。Lucene是一个高性能、全文本搜索库,它允许开发人员在应用程序中轻松实现复杂的搜索功能。这本书主要面向...

    Lucene与关系型数据库对比

    相比之下,关系型数据库在过去的二十余年里,因其操作便捷、易于维护、便于访问和安全性强的特点,在事务处理领域占据了主导地位。它们最初是为了满足诸如库存控制、工资计算、账目处理等传统应用场景而设计的。然而...

    lucene3源码分析

    为了保持索引的高效性和完整性,Lucene采用了段合并机制: - **合并策略**:决定了哪些段需要合并。 - **反向信息的合并**:处理词典、文档号等信息。 - **段合并的详细过程**:从缓存写入新段到最终删除旧段的过程...

    Java搜索引擎 Lucene

    6. **高可用性**:Lucene可以与其他Java项目无缝集成,支持多线程和分布式环境。 使用Lucene的基本步骤包括: 1. **创建索引**:首先,需要将要搜索的数据(如文件内容)读取并分词,然后使用Lucene API创建索引。 ...

    Lucene3.5源码jar包

    本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...

    lucene

    《深入理解Lucene:搜索引擎核心技术解析》 Lucene是一个全文搜索引擎库,由Apache软件基金会开发并维护,它提供了高效的文本检索、分析和存储功能。在Java编程语言中,Lucene被广泛应用于各种需要全文搜索功能的...

    lucene5.X与lucene3.60的版本差异

    《Lucene 5.x与3.6.0版本差异详解》 ...开发者在升级到新版本时,需要注意API的变更,以避免兼容性问题,并充分利用新版本带来的优势。通过理解这些变化,开发者可以更有效地利用Lucene构建高效、稳定的全文搜索系统。

    lucene7.7.2稳定版本

    此版本修复了多个已知问题,包括潜在的数据丢失风险、并发问题以及一些边缘情况下的错误,增强了系统在高负载和复杂环境下的可靠性。 4. **新特性和改进**: - **多段合并策略**:Lucene 引入了新的多段合并策略,...

    lucene 2.0 api以及lucene 3.0 api

    3. **多字段查询**: `MultiFieldQueryParser` 类允许同时在多个字段中进行查询,提高了搜索的灵活性。 4. **更强大的分词器**: 引入了 `TokenStream` 接口,允许自定义分词规则,增强了对各种语言的处理能力。 5. ...

    lucene所有的jar包

    《全面解析Lucene jar包:从...无论是“my的jar包”还是“ik的jar包”,都是为了让Lucene更好地适应不同的应用场景,提高搜索的效率和准确性。在实际开发中,开发者应根据需求灵活选择和配置,以实现最佳的搜索体验。

Global site tag (gtag.js) - Google Analytics