lucene 基本实现

来源:转载


lucene 基本实现


lucene 全文检索库,将非结构话数据的一部分信息提取出来,重新组织,时期变得有一定结构,然后对此有一定结构的的数据进行搜索,从而达到所搜相对比较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,成为索引。索引:已知文档中查找包含哪些字符串;反向索引:已知字符串查找在哪些文档中包含。
lucene包分析
1 document包:封装要索引的文档所需要的类,入docuemnt,field这样,每一个文档最终被封装成一个document对象
2 analysis包,主要功能室对文档进行分词,因为文档在建立索引之前必须进行分词,这个包的作用是为建立索引做准备
3 index 功能:协助创建索引以及对创建好的索引进行更新,里面有连个类:IndexWriter:用来创建索引 并添加文档到索引中,indexReader 用来删除索引中的文档。
4 search 功能:提供在建立好的索引上进行索引所需要的类,比如indexSearcher:定义指定的索引上进行搜索的方法,hits用来保存搜索得到的结果。
lucene简单搜索应用程序:
假设我们的电脑的目录中含有很多文本文档,我们需要查找哪些文档含有摸个关键词,为了实现这种功能
我们首先利用lucene对这个目录中的文档建立索引,然后在建立好的索引中搜索我们所要查找的文档。
第一步:建立索引
lucene五个基本类
document,field,indexWriter analyzer,directory 
document描述文档,可以指定htmml页面,一封电子邮件,或者一个文本文档。
一个document对象由多个Field对象组成。可以把document对象想象成数据库中的记录。而field对象时记录中的字段。
Field描述文档的某个属性,例如一封电子邮件的标题和内容。可以用两个Field对象来描述
Analyzer 在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是有
Analyzer来做的,Analyzer是一个抽象类,他有多个实现,针对不同的语言和应用选择适当的Analyzer,Analyzer把分词后的内容交给IndexWriter来建立索引。
IndexWriter 是lucene用来创建索引的一个核心类,他的作用是把一个个的document对象加到索引中来。
Directory
这个类代表lucene的索引的存储的位置,这是一个抽象类,它目前有两个实现,第一个是FSDirectory,它代表一个存储在文件系统中的索引位置,第二个是RAMDirectory,它代表一个存储在内容当中的索引的位置。
//建立索引
File fileDir= new File("f://s");
File indexDir = new File("f://index");
Analyzer analzyer = new StandardAnalyzer();
//分析器 Analyzer StandardAnalyzer ,stopAnalyzer 
IndexWriter index=new IndexWriter(indexDir,new StandAnlyzeer(),true);
File[]textFile = file.listFiles();
Long startTime = new Date().getTime();
for(int i=0;i<textFile.length;i++){
    if(textFile[i].isFile()&&textFile[i].getName().endWith(".txt"){
    System.out.println("file  "+textFile[i].getCanonicalPath()+"正在被索引。。。);
    String temp = FileReaderAll(textFiles[i].getCannonicalFile().toString(),"GBK");
System.out.println(temp);
Document document = new Document();
    Field pathField = new Field(file.getPath(),analzeyer,Field.store.YES);
    Field fieldBody = new Field("body",temp,store.yes,Field.Index.TOkenizer
    }
}
优化索引
indexWriter.optimize();
indexWriter.close();
public static String FileReaderAll(String fileName,String charset){
    BufferedReader reader = new BufferReader(new InputStreamReader(new FileInputStream(fileName),charset));
String line = new String();
String temp = new String();
while((line==reader.readLine())!=null){
temp+=line;
}
reader.close();
return temp;
}
查询数据: lucene
//保存查询位置记录数
Hits hits=null;
String queryString = "中华";
Query query = null;
//检索工具
IndexSearcher searcher = new IndexSearcher("f://index");
//分析器
Analyzer analyzer = new StandardAnalyzer();
try{
//通过输入的数据建立QueryParse ,然后通过QueryParse.parse(StringQuery)生成query
QueryParse qp = new QueryParse("body",analyzer);
query = qp.parse(qeuryString);
}catch(Exception e){}
if(searcher!=null){
//
hits = searcher.search(query);
if(hits.length>0){
System.out.println(hits.length);
}
}
lucene主要做两件事:一:建立索引  二:进行搜索
IndexWriter 将文档加入索引,同事控制索引过程中的一些参数
Analyzer:分析器,主要用于分析搜索引擎遇到的各种文本
Directory:索引存放的位置;lucene提供两种索引存放的位置,一种是内存,一种是磁盘
一般存在磁盘上,lucene提供了FSDirectory和RAMDirectory两个类
Document:文档;document相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为document对象才能进行索引。
Field字段。
IndexSearcher:是lucene中最基本的检索工具,所有的检索都会用到IndexSearcher工具
Query查询:lucene中支持模糊查询,语义查询,短语查询,组合查询等等
如: TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些类
QeuryParse:是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象
Hits:在搜索完成之后,需要把搜索的结果返回并显示给用户,只有这样才算是完成搜索的目的,在lucene中,搜索的结果的集合是用hits类的实例表示的。
StandardAnalyzer是lucene中内置的标准分析器
可以做如下功能
1、对原有句子按照空格进行了分词 
2、所有的大写字母都可以能转换为小写的字母 
3、可以去掉一些没有用处的单词,例如"is","the","are"等单词,也删除了所有的标点
 
 
 
  



分享给朋友:
您可能感兴趣的文章:
随机阅读: