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: 查询超时。
相关推荐
《全面解析Lucene 4.6:核心概念与应用实践》 Lucene 4.6是Apache Lucene项目的一个重要版本,它是一个高性能、全文本搜索引擎库,为开发者提供了强大的文本检索功能。在这个版本中,Lucene进行了诸多优化和改进,...
《深入理解Lucene 4.6:索引构建、查询执行与近实时搜索》 Lucene是一个开源全文搜索引擎库,广泛应用于各种信息检索系统。在本文中,我们将深入探讨Lucene 4.6版本,包括如何创建索引、执行查询以及实现近实时搜索...
《深入理解Lucene 4.6:搜索引擎框架详解》 Lucene是一个开源的全文检索库,由Apache软件基金会开发并维护。它提供了完整的搜索功能,包括...对于想要掌握最新Lucene技术的开发者来说,理解和学习这些变化至关重要。
《Lucene4.6实战应用》一书主要探讨了Apache Lucene 4.6版本在实际项目中的应用和深入理解。Lucene是一个高性能、全文...通过学习,读者不仅可以掌握Lucene的使用,还能理解其背后的原理,从而在实际开发中游刃有余。
18.lucene4.6索引的相关操作 19.lucene4.6的各种Query(1) 20.lucene4.6的各种Query(2) 21.lucene4.6的各种Query(3) 22.solr4.6的快速搭建 23.solr4.6索引的相关操作 24.solr4.6搜索的相关参数功能(1) 25.solr4.6搜索...
《深入理解Lucene 4.6:实例解析与实践指南》 Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护。...不断探索和学习Lucene的新特性和优化方法,对于提升全文检索系统的效能至关重要。
lucene
Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。 从之前发布其他chm文件下载用户的反映看,有不少朋友反映下载后...
对于抓取的数据,进行去重,去标签,然后利用lucene 和 solr 进行索引和搜索。 课程的最大特点是内容新颖全面而又通俗易懂。对于实际搜索引擎所涉及的各种核心技术都有全面细致的介绍,除了作为搜索系统核心的网络...
NULL 博文链接:https://sharp-fcc.iteye.com/blog/2038339
lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习...
通过对Lucene 4.6源代码的研读,我们可以学习到如何构建高效的全文搜索引擎,如何处理复杂的查询表达式,以及如何优化搜索结果的相关性和性能。此外,还可以了解到软件设计模式、数据结构和算法在实际项目中的应用,...
**Lucene 3.3.0 学习Demo** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发。在3.3.0版本中,Lucene提供了强大的文本搜索功能,包括分词、索引创建、查询解析和结果排序等。这个"Lucene3.3.0学习Demo...
Lucene4.6版本,适用于Lucene的所有研究,以及中文分词功能
Lucene.net学习.docx
**Lucene学习指南** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的搜索引擎库。它提供了一个简单的API,使得开发者能够方便地在应用中实现全文检索功能。本篇文章将...
**Lucene 概述** Lucene 是一个高性能、全文本搜索库,由 Apache 软件基金会开发。...通过学习和实践“Lucene demo”,开发者可以熟练掌握如何在自己的项目中运用 Lucene 实现高效、精准的全文搜索功能。
**Lucene.net学习帮助文档** Lucene.net是一个开源全文搜索引擎库,它是Apache Lucene项目的一部分,专门针对.NET Framework进行了优化。这个压缩包包含了Lucene.net的源码和中文学习文档,旨在帮助开发者深入理解...
本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记本人的Lucene2.9学习笔记 本人的Lucene2.9学习笔记
《Lucene 4.8学习指南与实战案例分析》 Lucene是一个强大的全文搜索引擎库,由Apache软件基金会开发,主要用于Java环境。版本4.8在功能和性能上都有显著提升,是许多开发者进行文本检索应用开发的重要工具。本文将...