最近对lucene的检索进行了肤浅的学习 先是把论坛里大部分的lucene的帖子看了下 大致了解了下lucene 决定学习 在自己测试的时候 发现在对大表的创建索引时耗费的时间实在太长 想通过多线程来解决 对一个表的总记录数来决定创建几个线程来创建索引, 结果是报错:
D:\lucene\index\_a.fnm (系统找不到指定的文件。)
Lock obtain timed out: SimpleFSLock@D:\lucene\index\write.lock
之类
难道lucene创建索引耗费是太长的问题真的没有解决 ,因为是初学没有去研究源代码 只是在自己的博客上发发感概 无意看到我篇文章的朋友不要笑我肤浅啊 鼓了勇气才敢来写第一篇博客的
我测试的代码:
主函数:
java 代码
- package luceneTest;
-
- import java.io.File;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
-
- import dataConnectionPool.DataConnectionPool;
-
- public class TMain {
- private String find = " select id,name from author";
- private Connection con;
- private Statement stmt;
- private File indexFile;
- private int count ;
- public TMain(File indexFile)
- {
- this.indexFile = indexFile;
- this.count = countD();
- }
- public int countD()
- {
- int count=0;
- try {
- con = DataConnectionPool.getBasicDataSource().getConnection();
- stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
- ResultSet rs = stmt.executeQuery(find);
- while(rs.next())
- {
- rs.last();
- count = rs.getRow();
- }
-
- System.out.println(" 表的总记录数 :"+count);
- } catch (SQLException e) {
-
- e.printStackTrace();
- }
- return count;
- }
- public void create() throws InterruptedException
- {
- int num = count/10;
-
- for(int i = 1;i<=num;i++)
- {
- System.out.println("main start :"+((i-1)*10+1));
- CDataIndex cd = new CDataIndex(((i-1)*10+1),10,indexFile);
-
- cd.start();
-
-
- }
- }
- public void print(File indexFile, String markInfo)
- {
- FData fd = new FData(indexFile,markInfo);
- fd.findData();
- }
-
- public static void main(String[] args) {
-
- File indexFile = new File("D:/lucene/index");
- String markInfo = "you";
- TMain tm = new TMain(indexFile);
- try {
- tm.create();
- tm.print(indexFile, markInfo);
- } catch (InterruptedException e) {
-
- e.printStackTrace();
- }
- }
-
- }
调用一个建立索引的类:
java 代码
- package luceneTest;
-
- import java.io.File;
- import java.io.IOException;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.util.Date;
-
- import org.apache.lucene.analysis.cjk.CJKAnalyzer;
- import org.apache.lucene.document.Document;
- import org.apache.lucene.document.Field;
- import org.apache.lucene.index.IndexReader;
- import org.apache.lucene.index.IndexWriter;
- import org.apache.lucene.store.FSDirectory;
-
- import dataConnectionPool.DataConnectionPool;
-
- public class CDataIndex extends Thread {
- private Connection con;
- private String find = " select id,name from author";
- private PreparedStatement ps;
- private int start = 0;
- private int num = 0;
- private File indexFile;
- private boolean mark = false; //通过这个来控制是用增量索引还是全局索引
- public CDataIndex(int start,int num,File indexFile)
- {
- this.start = start;
- this.num = num;
- this.indexFile = indexFile;
- }
-
-
-
- public void run()
- {
-
- System.out.println(" 开始索引!");
- Date beginDate = new Date();
-
- try {
- FSDirectory fsd = FSDirectory.getDirectory(indexFile.getAbsolutePath(), mark);
- if(IndexReader.isLocked(fsd)){
- IndexReader.unlock(fsd);;
- }
- IndexWriter writerF = new IndexWriter(fsd,new CJKAnalyzer());
-
-
-
-
- con = DataConnectionPool.getBasicDataSource().getConnection();
- ps = con.prepareStatement(find,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
- ResultSet rs = ps.executeQuery();
- System.out.println(" start :"+start);
- rs.absolute(start);
- rs.previous();
- while(rs.next()&&num!=0)
- {
- Document doc = new Document();
- doc.add(new Field("id",rs.getString(1),Field.Store.YES, Field.Index.UN_TOKENIZED));
- doc.add(new Field("content",rs.getString(2), Field.Store.YES,Field.Index.TOKENIZED ));
-
-
-
- writerF.addDocument(doc);
- num--;
- }
-
-
- writerF.close();
-
- Date endDate = new Date();
-
- System.out.println("索引耗去的时间(毫秒) :"
- + (endDate.getTime() - beginDate.getTime()));
-
- } catch (IOException e) {
-
- e.printStackTrace();
- } catch (SQLException e) {
-
- e.printStackTrace();
- }
-
- }
-
- }
分享到:
相关推荐
**Lucene 建立索引与查询指南** Lucene 是一个开源的全文搜索引擎库,由 Apache 软件基金会开发。它提供了高效、可扩展的搜索功能,被广泛应用于各种项目和产品中。本指南将详细介绍如何使用 Lucene 创建索引以及...
本文主要介绍如何在C#中使用Lucene.Net进行全文检索,包括建立索引、处理不同文件格式等内容。 首先,为了创建索引,我们需要指定资源文件和索引文件的存储路径。例如: ```csharp string path_index = @"F:/lucene...
1. 打开索引:使用`DirectoryReader.open()`打开已建立的索引,然后创建`IndexSearcher`对象进行搜索。 2. 构建查询:`QueryParser`类用于构建查询。你可以指定查询字段和查询文本,它会生成一个`Query`对象。 3. ...
其次,Lucene引入了分块索引,可以快速为新内容建立索引,并通过与旧索引合并来优化整个索引结构。此外,其面向对象的设计使得扩展和自定义功能变得简单。Lucene还提供了一个独立于语言和文件格式的文本分析接口,...
3. **建立搜索索引**:Lunecy负责对数据进行索引,创建倒排索引,以便于快速查找匹配的文档。Elasticsearch会自动处理这些工作,只需要配置好索引模板即可。 4. **查询执行**:通过Elasticsearch的查询DSL(Domain ...
标题“Lucene.net高速创建索引”所涉及的核心技术是Apache Lucene.NET,这是一个开源全文搜索引擎库,它是Lucene项目针对.NET框架的移植版本。Lucene.NET提供了高效、可扩展的文本搜索功能,使得开发者能够在他们的...
lunece 学习笔记实用知识库分享知识分享 在本文中,我们将从多方面探索 Lucene 和 Solr 相关的知识点,并对其进行详细的分析和解释。 Lucene 和 Solr 的基本概念 Lucene 是一个基于 Java 的搜索引擎库,提供了...
这可能包括内存泄漏、线程安全问题或其他可能导致系统崩溃或不正确结果的问题。 4. 更好的多语言支持:Lucene持续优化对非英文文本的处理,包括中文在内的多种语言。8.5.1版本可能提升了对中文分词的准确性和效率。...
1. **索引(Index)**:在Lucene中,索引是文档的预处理形式,它允许快速查找包含特定词的文档。索引过程包括分词(Tokenization)、词干提取(Stemming)、停用词处理(Stopword Removal)等步骤。 2. **Analyzer*...
索引是将非结构化的文本数据转换为可以快速搜索的结构化数据的过程。查询则是通过用户输入的关键词,利用索引来找到相关文档。Lucene提供了一个灵活的分析器框架,可以对输入文本进行分词、过滤等预处理操作,以便更...
apache软件基金会的网站使用了Lucene作为全文检索的引擎,IBM的开源软件eclipse[9]的2.1版本中也采用了Lucene作为帮助子系统的全文索引引擎,相应的IBM的商业软件Web Sphere[10]中也采用了Lucene。Lucene以其开放源...
- **创建索引**:客户端(可以是浏览器或 Java 程序)用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr 服务器根据 XML 文档添加、删除或更新索引。 - **搜索索引**:客户端用 GET 方法向 ...
4. **Lunece** 注意,这里可能是打错了,正确应该是“Lucene”。在Lucene项目中,通常会包含许多示例代码,这些代码覆盖了从基础到进阶的各种用法。通过查看这些代码,你可以学习如何使用`TokenStream`进行自定义的...
SpringBoot +Shiro+Mybatis +Thymeleaf +Layui+mysql+Lunece 图片使用的七牛云,属性设置在类cn.coderzhx.utils.VariableName里 如果不想用七牛云那么修改为为tomcat的upload目录 如果仅仅是本地运行项目的话,七牛云...
自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lunece的.net版本,实现了功能强大执行快速的全文检索引擎...
<br> 自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lunece的.net版本,实现了功能强大执行快速的全文检索...
5.自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lunece的.net版本,实现了功能强大执行快速的全文检索引擎。...
5.自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lunece的.net版本,实现了功能强大执行快速的全文检索引擎。...
自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可以和中科院的ICTCLAS相媲美,结合当前最成熟的Lunece的.net版本,实现了功能强大执行快速的全文检索引擎。...