Lucene
caoxu1987728
这个作者很懒,什么都没留下…
展开
-
PDFBox与lucene的集成
PDFBox提供和Lucene的集成,它提供了一套简单的方法把PDF Documents加入到Lucene的索引中去,请看以下代码: Document lucenedocument = LucenePDFDocument.getDocument(…); 其中,LucenePDFDocument是PDFBox中提供的一个类,它的getDocument被重载为3个方法,分别接收一个File对象原创 2008-04-30 17:08:00 · 2310 阅读 · 2 评论 -
Lucene源代码之FieldWriter
首先来看一下FieldWriter的功能:写入field信息文件(.fdt,.fdx文件)。总结一下:在FieldInfos类中调用write方法写入field名字文件(.fnm文件);调用FieldWriter的构造函数FieldWriter来写入field信息文件(.fdt,.fdx文件);调用DocumentWriter的WritePostings方法写入posting信息(.frq,.原创 2008-12-02 09:48:00 · 1087 阅读 · 0 评论 -
Lucene源代码之FieldInfos容器
FieldInfos是一个容器类,含有如下属性:static final byte IS_INDEXED = 0x1; static final byte STORE_TERMVECTOR = 0x2; static final byte STORE_POSITIONS_WITH_TERMVECTOR = 0x4; static final byte STORE_OFFSET_WITH原创 2008-11-27 14:02:00 · 1066 阅读 · 0 评论 -
Lucene源代码analysis之测试
以WhitespaceAnalyzer为例:测试的主函数为:package org.apache.lucene.analysis.test;import java.io.IOException;import java.io.StringReader;import org.apache.lucene.analysis.Analyzer;import o原创 2008-11-14 16:42:00 · 1025 阅读 · 0 评论 -
Lucene源代码之构造自己的分词器
首先郑重声明:本分词器不是我自己写的,但对于中文分词很好。分词名称:TjuChineseAnalyzer.源代码如下:package org.apache.lucene.analysis.tjuchinese;import java.io.IOException;import java.io.Reader;import java.io.StringReader;原创 2008-11-15 18:20:00 · 1655 阅读 · 0 评论 -
Lucene源代码之Analysis
Analysis包分析 Lucene中的Analysis包专门用于完成对于索引文件的分词.Lucene中的Token是一个非常重要的概念.首先理一下Analysis包下各个类之间的关系: 上面的基本上已经涵盖了所有的核心类了,但仍然缺少了一个独立ana原创 2008-11-13 22:06:00 · 2218 阅读 · 0 评论 -
lucene 关键词高亮显示
使用Lucene自带的Highlighter就可以实现对原始文件摘要的提取工作。Highlighter类有一个getBestFragment方法,这个方法有多个重载的方法,其中,使用:public final String getBestFragment(Analyzer analyzer, String fieldName,String text)就可以提取摘要,它实现了从指定的原原创 2008-10-10 21:43:00 · 1390 阅读 · 0 评论 -
Lucene源代码之高亮显示《三》
本篇为高亮显示源代码中最具重量级别的一个类。我现在只是把代码看了一遍,小的地方理解了一点,但仍然还未从整体上把握全局。package org.apache.lucene.search.highlight;import java.io.IOException;import java.io.StringReader;import java.util.ArrayList;原创 2008-10-20 22:00:00 · 1686 阅读 · 0 评论 -
Lucene源代码之高亮显示《一》
慢慢开始读Lucene源代码,首先就从高亮显示开始吧,因为最近才看过这个,而且好像是新版本后来加上的。我的方案:从实例逐一解决源代码。需要分析的实例代码:package org.apache.lucene.search.highlight;import java.io.IOException;import java.io.StringReader;impo原创 2008-10-19 22:07:00 · 1274 阅读 · 0 评论 -
Lucene源代码之高亮显示《二》
纵观:package org.apache.lucene.search.highlight;import java.util.HashMap;import java.util.HashSet;import org.apache.lucene.analysis.Token;import org.apache.lucene.index.IndexReader;原创 2008-10-20 10:13:00 · 1292 阅读 · 1 评论 -
排序(lucene)
终于跨入了新的一章。很多时候我们要把检索出来的东西进行排序有以下几种方法:一、score如何求得分呢?文档的得分是由4个部分决定的:即tf(词条频率)、idf(反转文档频率)、boost(Field的激励因子)和lengthNorm(长度因子)。算法如下:tf:要搜索的关键字在文档中出现次数的P平方根;idf:Math.log(numDocs/(double)(docFreg+1)原创 2008-04-27 21:35:00 · 1033 阅读 · 0 评论 -
ParalellMultiSearcher:多线程搜索
多线程搜索与多域搜索的比较: package ch4.searcher;import java.io.IOException;import org.apache.lucene.analysis.standard.*;import org.apache.lucene.document.*;import org.apache.lucene.index.*;import org.apache原创 2008-04-27 20:23:00 · 1246 阅读 · 0 评论 -
Lucene源代码之Payload元数据
首先我们仍然来了解一下它是什么?有什么作用?一个Payload是一个元数据(就是数据的数据) ,在Posting类中用到它,说明它是一个用于描述Posting对象的(构成和特征)。进行分词处理的时候,每切出一个词条Term,即这个词条存在了,则同时存储一个Payload信息。当把一个对放到postTable中的时候,就为该Posting增加了一个Payload元数据。这个元数据最早被添加原创 2008-12-05 11:04:00 · 2126 阅读 · 0 评论 -
Lucene源代码之WritePosting方法
首先要了解到“WritePosting()是DocumentWriter里面的一个方法”,定位要正确。实现作用:提供了写入.tvd、.tvf、.tvx文件以及.tis、.tii字典文件的入口,同时写入了.frq、.frx文件。刚开时候看这段代码,可谓“乱七八糟”,看不明白。等看完利用TermVector方式TermVectorsWriter写入.tvd、.tvf、.tvx文件以及Term原创 2008-12-04 21:30:00 · 774 阅读 · 0 评论 -
HTMLParser之Lexer的功能实现
需要的HTMLParser包到这里下载http://sourceforge.net/project/showfiles.php?group_id=24399HTML有三种类型的Node的节点,RemarkNode(Html中的注释)、TagNode(标签节点)、TextNode(文本节点)lexer包里面对HTML经ixngle4级封装,Stream, Source, Page and原创 2008-05-11 17:23:00 · 2547 阅读 · 0 评论 -
HTMLParser的功能实现之Visiorr模式
先看一下父类NodeVisitord的代码吧public abstract class NodeVisitor{ //是否递归访问孩子节点 private boolean mRecurseChildren; //是否递归访问当前节点 private boolean mRecurseSelf; public NodeVisitor ()原创 2008-05-12 17:51:00 · 1092 阅读 · 0 评论 -
Lucene 2.0的新类IndexModifier
新类IndexModifier集成了IndexWriter的大部分功能和IndexReader中的对索引删除功能。 具体的用法看看下面的例子就明白了。 package ch3.lucenedemo.createindex;import java.io.IOException;import org.apache.lucene.analysis.standard.Stand原创 2008-04-22 22:34:00 · 1183 阅读 · 1 评论 -
HTMLParser的功能及实现之Filter模式
Filter模式可以通过import org.htmlparser.filters.*;以及import org.htmlparser.NodeFilter;来实现接口https://svn.sourceforge.net/svnroot/htmlparser/trunk/lexer/src/main/java/org/htmlparser/NodeFilter.java测试类从sina主页上原创 2008-05-12 16:59:00 · 2331 阅读 · 0 评论 -
Lucene源代码之信息索引
索引是什么?索引是一种数据存储和组织结构。逆常人之思维,lucene索引采用倒排文件索引构造索引系统。具体实现原理举例说明:假设有3篇文章,file1,file2,file3,文件内容如下: file1 (单词1,单词2,单词3,单词4....)file2 (单词a,单词b,单词c,单词d....)file3 (单词1,单词a,单词3,单词d....)建立的倒排索引就是这个原创 2008-11-26 20:18:00 · 1911 阅读 · 0 评论 -
Lucene源代码之SegmentInfo
首先还是来看看,SegmentInfo到底是干什么的吧:Segmentinfo是保存在SegmentInfos容器里面,它主要是记录每个segment的情况。还要引用前面的Segments_N文件格式图: 看到里面两个大的虚线框了吗,每一个虚线框就表示一个segment,里面的信息就是SegmentInfo需要处理(保存、写入)的数据,也就是它的属性,具体有SegName、SegSiz原创 2008-11-29 11:34:00 · 1791 阅读 · 1 评论 -
Lucene源代码之SegmentInfos容器
首先我们先了解一下什么是SegmentInfos;该类主要是对SegmentInfo进行管理的。在每次执行打开索引目录、打开索引文件、写入文件等等,都需要对SegmentInfos进行维护。因为SegmentInfos记录了对索引文件进行操作(如:建立索引、删除索引)而生成的一些索引文件格式、版本号的信息,所以每当索引文件有操作需求,都要从SegmentInfos中获取当前的一些详细记录,原创 2008-11-27 21:19:00 · 1881 阅读 · 2 评论 -
Lucene源代码之DocumentWriter
首先我们先概念性地了解一下索引如何写入的。Lucene的索引文件是按照Document、Field、Term三个层面存了document,field,term的信息。一个文件系统必定存在着一组互逆的过程:写入,读取。检索系统也是一种文件系统,也存在互逆过程,有相关的类与之对应:1)写入→*Writer2)读取→*Reader标引过程我们着重描述*Writer类的功能,Lucene有原创 2008-11-30 14:51:00 · 2298 阅读 · 0 评论 -
Lucene源代码索引合并之field,term层
上一篇文章中的mergeSegments方法中的第51行 mergedDocCount = merger.merge(); // 通过SegmentMerger merger获取需要合并的索引段文件数量调用了SegmentMerger的对象中的merge方法对索引进行更深入的field&term合并。SegmentMerger的merge方法如下: f原创 2008-12-07 14:58:00 · 1842 阅读 · 1 评论 -
Lucene源代码索引合并之document层
在建立索引过程中,生成的索引文件的格式有很多种。然而,在默认情况下,却使用复合索引,即在本地磁盘的索引目录中生成了一些.扩展名为.cfs的索引文件,即复合索引格式文件。如下图:下面来回顾一下前面的IndexWriter的addDocument方法 public void addDocument(Document doc, Analyzer analyzer) throws原创 2008-12-06 21:32:00 · 1594 阅读 · 0 评论 -
Lucene源代码之创建索引小结
在内存中创建索引已经基本上告一个段落了,现总结一下。也就按我的测试代码来吧,效果如下 仔细观察一下好像没有tvd、tvx及tvf文件。对的,因为测试代码中没有以termVector方式存储field的,如果以下面的代码为例,则会出现。Document doc5=new Document(); Field f5=new Field("title原创 2008-12-06 16:26:00 · 797 阅读 · 0 评论 -
MultiSearcher在多个索引上搜索
以前的搜索都是单域搜索,下面就是多域搜索MultiFieldQueryParserpublic static Query parse(String[ ] queries,String[ ] fields,BooleanClause.Occur.[ ] flags,Analyzer analyzer) t hroiws ParseExceptonqueries 表示要查找的域中关键字;f原创 2008-04-27 19:43:00 · 2525 阅读 · 0 评论 -
what"s QueryParser
何为Parser,字典里的意思是“剖析器”,即我们所说的解析器,用于解析用户所输入的关键字。最简单的代码特例: String field ="bookname";String queryStr="java Strust";QueryParser parser=new QueryParser(field,new StandardAnalyzer());Query q=new pars原创 2008-04-26 17:53:00 · 544 阅读 · 1 评论 -
TermQuery词条搜索
其实词条搜索我已经在前面写过了,在这里纯粹是重复了一遍。只是添加了hits.score(i)以及hits.id(i)两个输入量.而这两者以后还会用到。先看看代码再说: package ch4.searcher;import java.io.IOException;import org.apache.lucene.analysis.standard.*;import org.apach原创 2008-04-23 21:15:00 · 763 阅读 · 0 评论 -
lucene中search内置的Filter
先来看一下RangeFilter:public static void printFilter(String path)throws IOException { Term normal=new Term("securitylevel",SECURITY_NORMAL+""); Term middle=new Term("securitylevel",SEC原创 2008-04-29 21:09:00 · 3499 阅读 · 0 评论 -
过滤器Filter的使用
要过滤一部分搜索内容就要用到BitSet,何为BitSet呢?即一个“位集合”队列,当lucene返回结果时,会首先遍历BitSet,仅将那些值为true的文档返回。而且要引入新的API(每次学到新内容时,都要上网查,太麻烦了,而且这个时必须的,浪费时间)import java.util.BitSet;然后新建一个AdvancedSecurityFilter类:public原创 2008-04-29 16:49:00 · 979 阅读 · 0 评论 -
索引的读取、删除操作
其实这段不是很难,但万事开头难,刚开始确实摸不着头脑,很多地方错了也不知道原因(现在也是,不过好了一点)终于在我室友的帮助下,初步懂了一点内容,这是开始,踏出了第一步,我想以后会容易一些。总之,我那室友是个牛人, 在这很感谢他!一语点醒梦中人啊,呵呵…… package ch3.lucenedemo.createindex;import java.io.IOException;impo原创 2008-04-21 22:43:00 · 957 阅读 · 3 评论 -
索引的读取工具IndexReader
今天花了一个晚上的时间来调试下面这个“简单”的程序,结果还是没成功,也不知是什么原因,先记录下代码吧,可能有些知识还没学,不会用。 package ch2.lucenedmo.delete;import java.io.IOException;import jeasy.analysis.MMAnalyzer;import org.apache.lucene.document.Docum原创 2008-04-20 22:26:00 · 3532 阅读 · 0 评论 -
索引的合并与优化(lucene)
下面就介绍一下索引的建立、合并及优化操作1.索引格式其实索引目录有两种格式,一种是除配置文件外,每一个Document独立成为一个文件(这种搜索起来会影响速度)。另一种是全部的Document成一个文件,这样属于复合模式就快了。2.索引文件可放的位置:索引可以存放在两个地方1.硬盘,2.内存放在硬盘上可以用FSDirectory(),放在内存的用RAMDirectory()不过一关机就没了FS原创 2008-04-18 21:56:00 · 1195 阅读 · 0 评论 -
第一个“搜索引擎”【搜索】
索引终于建好了,下面就是搜索阶段了 package ch2.lucenedmo.test;import java.io.*;import java.util.*;import org.apache.lucene.index.*;import org.apache.lucene.search.*; 定义一个Searcher类加入内容 private String原创 2008-04-16 20:25:00 · 465 阅读 · 0 评论 -
第一个“搜索引擎”【索引】
在写索引前,先了解一下replace吧replacepublic String replace(char oldChar,char newChar)Returns a new string resulting from replacing all occurrences of oldChar in this string with newChar. If the character o原创 2008-04-15 16:44:00 · 643 阅读 · 1 评论 -
回顾lucene第一个搜索
写了一个小程序,现在也该总结一下了:首先介绍一下遇到过得方法吧listFiles() - Method in class java.io.File Returns an array of abstract pathnames denoting the files in the directory denoted by this abstract pathname. lastIndexOf 方法原创 2008-04-17 12:30:00 · 857 阅读 · 0 评论 -
第一个“搜索引擎”【预处理】
在eclipse中导入包,方法直接复制到工程后用右键中的bulid path中加入即可 下面开始我们的实例吧package ch2.lucenedemo.preprocess;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;原创 2008-04-14 22:22:00 · 602 阅读 · 0 评论 -
lucene的简单使用
1. Lucene的简介 1.1 Lucene 历史 org.apache.lucene包是纯java语言的全文索引检索工具包。 Lucene的作者是资深的全文索引/检索专家,最开始发布在他本人的主页上,2001年10月贡献给APACHE,成为APACHE基金jakarta的一个子项目。 目前,lucene广泛用于全文索引/检索的项目中。 lucen转载 2008-04-14 21:55:00 · 628 阅读 · 0 评论 -
一个简单的Filter
本文主要讲一讲搜索的过滤器:首先要引入基类,import org.apache.lucene.search.Filter;建立索引:public static void filter(String path)throws Exception { IndexWriter writer=new IndexWriter(path,new StandardAna原创 2008-04-28 20:23:00 · 744 阅读 · 0 评论 -
几种检索的方法
迄今为止,我们已经学习了几种检索的方法,归纳一下:首先,readerIndexReader reader=IndexReader.open(path);for(int i=0;ireader.numDocs();i++){ System.out.println(reader.document(i);} System.out.println(reader.getVersion);原创 2008-04-29 17:19:00 · 1784 阅读 · 0 评论