`
sgzlove2007
  • 浏览: 5252 次
  • 性别: Icon_minigender_1
  • 来自: 武汉->广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

lunece建立索引遇到的问题

阅读更多

 

最近对lucene的检索进行了肤浅的学习  先是把论坛里大部分的lucene的帖子看了下  大致了解了下lucene   决定学习  在自己测试的时候  发现在对大表的创建索引时耗费的时间实在太长 想通过多线程来解决 对一个表的总记录数来决定创建几个线程来创建索引, 结果是报错:

 D:\lucene\index\_a.fnm (系统找不到指定的文件。)

Lock obtain timed out: SimpleFSLock@D:\lucene\index\write.lock

之类

 

难道lucene创建索引耗费是太长的问题真的没有解决  ,因为是初学没有去研究源代码  只是在自己的博客上发发感概  无意看到我篇文章的朋友不要笑我肤浅啊 鼓了勇气才敢来写第一篇博客的

我测试的代码:

主函数:

java 代码
  1. package luceneTest;   
  2.   
  3. import java.io.File;   
  4. import java.sql.Connection;   
  5. import java.sql.PreparedStatement;   
  6. import java.sql.ResultSet;   
  7. import java.sql.SQLException;   
  8. import java.sql.Statement;   
  9.   
  10. import dataConnectionPool.DataConnectionPool;   
  11.   
  12. public class TMain {   
  13.     private String find = " select id,name from author";   
  14.     private Connection con;   
  15.     private Statement stmt;   
  16.     private File indexFile;   
  17.     private int count ;   
  18.     public TMain(File indexFile)   
  19.     {   
  20.         this.indexFile = indexFile;   
  21.         this.count = countD();   
  22.     }   
  23.     public int countD()   
  24.     {      
  25.         int count=0;   
  26.         try {   
  27.             con = DataConnectionPool.getBasicDataSource().getConnection();   
  28.             stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);   
  29.             ResultSet rs  = stmt.executeQuery(find);   
  30.             while(rs.next())   
  31.            {   
  32.                   rs.last(); // 移动到最后一行    
  33.                   count = rs.getRow(); // 获得当前行号:此处即为最大记录数    
  34.            }    
  35.                
  36.             System.out.println(" 表的总记录数 :"+count);   
  37.         } catch (SQLException e) {   
  38.             // TODO Auto-generated catch block   
  39.             e.printStackTrace();   
  40.         }   
  41.         return count;   
  42.     }   
  43.     public void create() throws InterruptedException   
  44.     {   
  45.         int num = count/10;   
  46.            
  47.         for(int i = 1;i<=num;i++)   
  48.         {   
  49.             System.out.println("main start :"+((i-1)*10+1));   
  50.             CDataIndex cd = new CDataIndex(((i-1)*10+1),10,indexFile);   
  51.   
  52.                 cd.start();   
  53.                
  54.        
  55.         }      
  56.     }   
  57.     public void print(File indexFile, String markInfo)   
  58.     {   
  59.         FData fd = new FData(indexFile,markInfo);   
  60.         fd.findData();   
  61.     }   
  62.        
  63.     public static void main(String[] args) {   
  64.         // TODO Auto-generated method stub   
  65.      File indexFile = new File("D:/lucene/index");   
  66.      String markInfo = "you";   
  67.      TMain tm = new TMain(indexFile);   
  68.       try {   
  69.         tm.create();   
  70.           tm.print(indexFile, markInfo);   
  71.     } catch (InterruptedException e) {   
  72.         // TODO Auto-generated catch block   
  73.         e.printStackTrace();   
  74.     }       
  75.     }   
  76.   
  77. }   

 

调用一个建立索引的类:

java 代码
  1. package luceneTest;   
  2.   
  3. import java.io.File;   
  4. import java.io.IOException;   
  5. import java.sql.Connection;   
  6. import java.sql.PreparedStatement;   
  7. import java.sql.ResultSet;   
  8. import java.sql.SQLException;   
  9. import java.util.Date;   
  10.   
  11. import org.apache.lucene.analysis.cjk.CJKAnalyzer;   
  12. import org.apache.lucene.document.Document;   
  13. import org.apache.lucene.document.Field;   
  14. import org.apache.lucene.index.IndexReader;   
  15. import org.apache.lucene.index.IndexWriter;   
  16. import org.apache.lucene.store.FSDirectory;   
  17.   
  18. import dataConnectionPool.DataConnectionPool;   
  19.   
  20. public class CDataIndex extends Thread {   
  21.     private Connection con;   
  22.     private String find = " select id,name from author";   
  23.     private PreparedStatement ps;   
  24.     private int start = 0;   
  25.     private int num = 0;   
  26.     private File indexFile;   
  27.     private boolean mark = false;    //通过这个来控制是用增量索引还是全局索引
  28.     public CDataIndex(int start,int num,File indexFile)   
  29.     {   
  30.         this.start = start;   
  31.         this.num = num;   
  32.         this.indexFile = indexFile;   
  33.     }   
  34.        
  35.        
  36.        
  37.     public void run()   
  38.     {   
  39.            
  40.         System.out.println(" 开始索引!");   
  41.         Date beginDate = new Date();               
  42.                
  43.             try {   
  44.                 FSDirectory fsd =  FSDirectory.getDirectory(indexFile.getAbsolutePath(), mark);   
  45.                    if(IndexReader.isLocked(fsd)){      //这   
  46.                        IndexReader.unlock(fsd);;   
  47.                       }   
  48.             IndexWriter writerF = new IndexWriter(fsd,new CJKAnalyzer());   
  49. //          RAMDirectory ramD = new RAMDirectory();   
  50. //          IndexWriter writerR = new IndexWriter(ramD,new StandardAnalyzer());   
  51.                
  52.                
  53.             con = DataConnectionPool.getBasicDataSource().getConnection();   
  54.             ps = con.prepareStatement(find,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);   
  55.             ResultSet rs  = ps.executeQuery();   
  56.             System.out.println(" start :"+start);   
  57.             rs.absolute(start);   
  58.             rs.previous();   
  59.             while(rs.next()&&num!=0)   
  60.             {   
  61.                 Document doc = new Document();   
  62.                 doc.add(new Field("id",rs.getString(1),Field.Store.YES, Field.Index.UN_TOKENIZED));   
  63.                 doc.add(new Field("content",rs.getString(2), Field.Store.YES,Field.Index.TOKENIZED ));   
  64.                 //writerR.optimize();   
  65.                 //writerR.addDocument(doc); 
  66.                 writerF.optimize(); 
  67.                 writerF.addDocument(doc);   
  68.                 num--;   
  69.             }   
  70. //          writerR.optimize();   
  71. //          writerR.close();           
  72.             writerF.close();               
  73. //          writerF.addIndexes(new Directory[]{ramD});   
  74.             Date endDate = new Date();   
  75.   
  76.             System.out.println("索引耗去的时间(毫秒) :"  
  77.                     + (endDate.getTime() - beginDate.getTime()));   
  78.                
  79.         } catch (IOException e) {   
  80.             // TODO Auto-generated catch block   
  81.             e.printStackTrace();   
  82.         } catch (SQLException e) {   
  83.             // TODO Auto-generated catch block   
  84.             e.printStackTrace();   
  85.         }   
  86.   
  87.     }   
  88.   
  89. }   
分享到:
评论
9 楼 taikeqi 2008-05-05  
估计是建立索引的时候这个行纪录不存在或者被锁定用来修改。
解决办法,引入同步机制。
8 楼 taikeqi 2008-05-05  
这个问题估计是当给数据库某个行建立索引的时候,数据库某行被锁定或者根本这行就不存在(正在此时被删除了),就会造成这种现象。
解决办法,引入同步机制。
7 楼 lklkdawei 2007-09-05  
原来是没有 调用 IndexWriter 对象 中的 writer.optimize()方法
6 楼 lklkdawei 2007-09-05  
public void unDelete()throws Exception{
IndexReader reader = IndexReader.open(path);
reader.undeleteAll(); // 这里出错了
reader.close();
}
5 楼 lklkdawei 2007-09-05  
public void unDelete()throws Exception{
IndexReader reader = IndexReader.open(path);
reader.undeleteAll();
reader.close();
}
4 楼 lklkdawei 2007-09-05  
我在删除索引的时候 出现 了这样的错误:

Lock obtain timed out: SimpleFSLock@D:\lucene\index\write.lock
3 楼 marky 2007-08-21  
MM的照片能不能放大一点?
2 楼 Nothingstop 2007-06-06  
索引啊?我不懂,想帮忙也帮不上,呵呵!不过还是有人关注的吗
只是搞索引的人比例少点
1 楼 sgzlove2007 2007-06-02  
帖子没人关注啊 伤心个先 被投个隐藏的愿望都没能实现啊 呵呵 最近在网上听人说索引时间没什么办法来解决 只能在后台偷偷的运行  

相关推荐

    lunece 建立索引与查询示例

    **Lucene 建立索引与查询指南** Lucene 是一个开源的全文搜索引擎库,由 Apache 软件基金会开发。它提供了高效、可扩展的搜索功能,被广泛应用于各种项目和产品中。本指南将详细介绍如何使用 Lucene 创建索引以及...

    lunece全文检索C#

    本文主要介绍如何在C#中使用Lucene.Net进行全文检索,包括建立索引、处理不同文件格式等内容。 首先,为了创建索引,我们需要指定资源文件和索引文件的存储路径。例如: ```csharp string path_index = @"F:/lucene...

    lunece入门之HelloWorld

    1. 打开索引:使用`DirectoryReader.open()`打开已建立的索引,然后创建`IndexSearcher`对象进行搜索。 2. 构建查询:`QueryParser`类用于构建查询。你可以指定查询字段和查询文本,它会生成一个`Query`对象。 3. ...

    lunece

    其次,Lucene引入了分块索引,可以快速为新内容建立索引,并通过与旧索引合并来优化整个索引结构。此外,其面向对象的设计使得扩展和自定义功能变得简单。Lucene还提供了一个独立于语言和文件格式的文本分析接口,...

    lunece_search_3.0.zip_lunece+es

    3. **建立搜索索引**:Lunecy负责对数据进行索引,创建倒排索引,以便于快速查找匹配的文档。Elasticsearch会自动处理这些工作,只需要配置好索引模板即可。 4. **查询执行**:通过Elasticsearch的查询DSL(Domain ...

    Lucene.net高速创建索引

    标题“Lucene.net高速创建索引”所涉及的核心技术是Apache Lucene.NET,这是一个开源全文搜索引擎库,它是Lucene项目针对.NET框架的移植版本。Lucene.NET提供了高效、可扩展的文本搜索功能,使得开发者能够在他们的...

    lunece 学习笔记实用知识库分享知识分享

    lunece 学习笔记实用知识库分享知识分享 在本文中,我们将从多方面探索 Lucene 和 Solr 相关的知识点,并对其进行详细的分析和解释。 Lucene 和 Solr 的基本概念 Lucene 是一个基于 Java 的搜索引擎库,提供了...

    最新版linux lucene-8.5.1.tgz

    这可能包括内存泄漏、线程安全问题或其他可能导致系统崩溃或不正确结果的问题。 4. 更好的多语言支持:Lucene持续优化对非英文文本的处理,包括中文在内的多种语言。8.5.1版本可能提升了对中文分词的准确性和效率。...

    Lucene检索

    1. **索引(Index)**:在Lucene中,索引是文档的预处理形式,它允许快速查找包含特定词的文档。索引过程包括分词(Tokenization)、词干提取(Stemming)、停用词处理(Stopword Removal)等步骤。 2. **Analyzer*...

    lucene-4.10.2

    索引是将非结构化的文本数据转换为可以快速搜索的结构化数据的过程。查询则是通过用户输入的关键词,利用索引来找到相关文档。Lucene提供了一个灵活的分析器框架,可以对输入文本进行分词、过滤等预处理操作,以便更...

    全文检索 lucene

    apache软件基金会的网站使用了Lucene作为全文检索的引擎,IBM的开源软件eclipse[9]的2.1版本中也采用了Lucene作为帮助子系统的全文索引引擎,相应的IBM的商业软件Web Sphere[10]中也采用了Lucene。Lucene以其开放源...

    solr的学习

    - **创建索引**:客户端(可以是浏览器或 Java 程序)用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr 服务器根据 XML 文档添加、删除或更新索引。 - **搜索索引**:客户端用 GET 方法向 ...

    Lucene常用的Demo

    4. **Lunece** 注意,这里可能是打错了,正确应该是“Lucene”。在Lucene项目中,通常会包含许多示例代码,这些代码覆盖了从基础到进阶的各种用法。通过查看这些代码,你可以学习如何使用`TokenStream`进行自定义的...

    Blog-online-System:已经上线的SpringBoot博客项目

    SpringBoot +Shiro+Mybatis +Thymeleaf +Layui+mysql+Lunece 图片使用的七牛云,属性设置在类cn.coderzhx.utils.VariableName里 如果不想用七牛云那么修改为为tomcat的upload目录 如果仅仅是本地运行项目的话,七牛云...

    最新.net技术博客源代码.rar

    自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lunece的.net版本,实现了功能强大执行快速的全文检索引擎...

    X3BLOG 单用户版 1.0 build80707 (access)

    &lt;br&gt; 自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lunece的.net版本,实现了功能强大执行快速的全文检索...

    x3blog 单用户博客系统 1.0.80802 编译版

    5.自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lunece的.net版本,实现了功能强大执行快速的全文检索引擎。...

    x3blog 单用户博客系统 1.0.80802 源代码

    5.自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lunece的.net版本,实现了功能强大执行快速的全文检索引擎。...

    x3blog单用户博客程序源码-1.0.build80802-src

    自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lunece的.net版本,实现了功能强大执行快速的全文检索引擎。...

Global site tag (gtag.js) - Google Analytics