`

Lucene4.6 学习 001

阅读更多

package com.zhangzhanlei.lucene;

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

 

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.IndexWriterConfig;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

import org.apache.lucene.util.Version;

 

public class TestIndexer

{

private String fieldName;

private String endStr;

 

public TestIndexer(String fieldName,String endStr)

{

this.fieldName = fieldName;

this.endStr = endStr;

}

/**

* lucene 索引创建 主方法

* @param indexDir

* @param dataDir

* @return

* @throws IOException

*/

public int index(File indexDir,File dataDir) throws IOException

{

if(!dataDir.exists()||!dataDir.isDirectory())

{

throw new IOException(dataDir+":does not exist or is not a directory");

}

Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_46,true);

IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_46,analyzer);

Directory directory = FSDirectory.open(indexDir);

if(IndexWriter.isLocked(directory))

{

IndexWriter.unlock(directory);

}

IndexWriter writer = new IndexWriter(directory,indexWriterConfig);

writer.deleteAll();

indexDirectory(writer,dataDir);

int numIndexed = writer.numDocs();

writer.close();

 

return numIndexed;

 

}

 

public void indexDirectory(IndexWriter writer,File dir) throws IOException

{

File [] fiels = dir.listFiles();

for(File file : fiels)

{

if(file.isDirectory())

{

indexDirectory(writer,file);

}

else if (file.getName().endsWith(this.endStr))

{

indexFile(writer,file);

}

}

}

 

/**

* 对文件创建索引

* @param writer

* @param f

* @throws IOException

*/

public void indexFile(IndexWriter writer,File f) throws IOException

{

if(f.isHidden()||!f.exists()||!f.canRead())

{

return;

}

System.out.println("Indexing: "+f.getCanonicalPath());

getTXT (writer,f,"GBK");

}

 

/***

* 读取文件,为单行加入索引

* @param file

* @param charset

* @return

* @throws IOException

*/

public void getTXT (IndexWriter writer,File file,String charset) throws IOException

{

FileInputStream fileInputStream = new FileInputStream(file);

InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,charset);

BufferedReader reader = new BufferedReader(inputStreamReader);

String line = new String();

while((line=reader.readLine())!=null)

{

Document doc = new Document();

doc.add(new Field("line",line,Field.Store.YES,Field.Index.ANALYZED));

writer.addDocument(doc);

}

reader.close();

}

 

/**

* @param args

*/

public static void main(String[] args)

{

TestIndexer indexer = new TestIndexer("filepath",".txt");

try

{

File indexDir = new File ("d:\\lucenetest\\index");

File dataDir = new File ("d:\\lucenetest\\file");

int result = indexer.index(indexDir, dataDir);

System.out.println("indexing : " +result + " files.");

}

catch (Exception e)

{

e.printStackTrace();

}

}

 

}

 

Indexing: D:\lucenetest\file\bwpf814.txt

Indexing: D:\lucenetest\file\bwpf815.txt

Indexing: D:\lucenetest\file\bwpf816.txt

Indexing: D:\lucenetest\file\bwpf817.txt

Indexing: D:\lucenetest\file\bwpf818.txt

indexing : 45550 files.

 

 

package com.zhangzhanlei.lucene;

 

import java.io.File;

import java.io.IOException;

 

import org.apache.lucene.analysis.Analyzer;

import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.index.IndexReader;

import org.apache.lucene.queryparser.classic.ParseException;

import org.apache.lucene.queryparser.classic.QueryParser;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.Query;

import org.apache.lucene.search.ScoreDoc;

import org.apache.lucene.search.TopDocs;

import org.apache.lucene.store.Directory;

import org.apache.lucene.store.FSDirectory;

import org.apache.lucene.util.Version;

 

public class TestSearcher

{

 

private File indexDir;

private String fieldName;

 

public TestSearcher (File indexDir,String fieldName)

{

this.indexDir = indexDir;

this.fieldName = fieldName;

}

 

public void searcher(String keywords) throws IOException, ParseException

{

Directory fsDir = FSDirectory.open(indexDir);

IndexReader reader = IndexReader.open(fsDir);

IndexSearcher is = new IndexSearcher(reader);

Analyzer analyzer = new SmartChineseAnalyzer(Version.LUCENE_46,true);

QueryParser queryParser = new QueryParser(Version.LUCENE_46,fieldName,analyzer);

Query query = queryParser.parse(keywords);

 

TopDocs docs = is.search(query, 1000);

ScoreDoc [] scoreDoc = docs.scoreDocs;

System.out.println("Found "+docs.totalHits+" documents that matched query '"+keywords +"'");

for(int i = 0 ;i<scoreDoc.length;i++)

{

Document miDoc = reader.document(scoreDoc[i].doc);

System.out.println(miDoc.get(fieldName));

}

reader.close();

}

/**

* @param args

*/

public static void main(String[] args)

{

TestSearcher searcher = new TestSearcher(new File("d:\\lucenetest\\index"),"line");

try

{

searcher.searcher("查询超时");

}

catch(Exception e)

{

e.printStackTrace();

}

}

 

}

 

Found 750 documents that matched query '查询超时'

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 查询超时。

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 查询超时。

分享到:
评论

相关推荐

    lucene4.6所有jar包

    《深入理解Lucene 4.6:搜索引擎框架详解》 Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它提供了完整的搜索功能,包括...对于想要掌握最新Lucene技术的开发者来说,理解和学习这些变化至关重要。

    Lucene4.6实战应用

    《Lucene4.6实战应用》一书主要探讨了Apache Lucene 4.6版本在实际项目中的应用和深入理解。Lucene是一个高性能、全文检索库,它为开发者提供了强大的文本搜索功能。作为开源项目,Lucene被广泛应用于各种信息检索...

    lucene4.6实例

    《深入理解Lucene 4.6:实例解析与实践指南》 Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护。...不断探索和学习Lucene的新特性和优化方法,对于提升全文检索系统的效能至关重要。

    luence4.6例子

    通过对Lucene 4.6源代码的研读,我们可以学习到如何构建高效的全文搜索引擎,如何处理复杂的查询表达式,以及如何优化搜索结果的相关性和性能。此外,还可以了解到软件设计模式、数据结构和算法在实际项目中的应用,...

    Lucene demo

    **Lucene 概述** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。...通过学习和实践“Lucene demo”,开发者可以熟练掌握如何在自己的项目中运用 Lucene 实现高效、精准的全文搜索功能。

    lukeall-4.6.0.jar luke工具 lucene查看索引库工具

    《Luke工具:深入理解Lucene索引库》 在信息技术领域,搜索引擎的构建与优化是一项至关重要的任务。其中,Lucene作为一个开源的...无论你是进行日常的开发工作,还是在学习和研究Lucene,Luke都是一个不可或缺的伙伴。

    【分享:lucene学习资料】---<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    1&gt; lucene学习笔记 2&gt; 全文检索的实现机制 【1】lucene学习笔记的目录如下 1. 概述 3 2. lucene 的包结构 3 3. 索引文件格式 3 4. lucene中主要的类 4 4.1. Document文档类 4 4.1.1. 常用方法 4 4.1.2. 示例 4 4.2...

    解密搜索引擎技术实战:Lucene&Java精华版

    - **4.6 概率语言模型的分词方法**:探讨了基于概率语言模型的分词技术。 - **4.7 N元分词方法**:讲解了基于N元模型的分词策略。 - **4.8 新词发现**:介绍了如何识别并添加新词到词典中。 - **4.9 未登录词识别**...

    JiveJdon v4.6.1.zip

    类似google的全文搜索(Compass lucene 一个论坛如果没有强大搜索,只能成为废话垃圾桶);基于AOP的通用权限实现;Evans DDD实现案例;所有业务功能插件式管理;界面和内容完全分离;依托Jdon框架高性能和内容实时...

    opencms内容管理

    - 学习如何利用Lucene创建全文搜索索引。 **8.2 至 8.5 搜索引擎配置** - 探讨如何配置搜索引擎的各项参数,如文档类型、分析器等。 以上是关于OpenCMS内容管理的知识点梳理,通过学习这些内容,可以帮助开发者更...

    OpenCms中文指南

    通过上述知识点的梳理,我们不仅了解了OpenCms的基本概念和发展历程,还深入学习了其安装配置、快速上手指南以及核心功能模块的具体使用方法。这些内容为初学者提供了全面而系统的指导,有助于更好地掌握OpenCms的...

Global site tag (gtag.js) - Google Analytics