
lucene
文章平均质量分 83
pavel0
这个作者很懒,什么都没留下…
展开
-
创建索引的时候出现的错误
<OFMsg>251658517"1"1190570570894"603984231"0"1563268982" col_7451" col_7451.JDBC_62119" zjw-se1" BaseException.java"-1"3 com.microsoft.sqlserver.jdbc.SQLServerException: 系统内存不足。请对大型 Resul原创 2010-01-04 10:13:49 · 1697 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(35)
于MultiPhraseQuery(多短语查询)。MultiPhraseQuery可以通过多个短语的拼接来实现复杂查询。举个例子:现在使用StandardAnalyzer分析器建立索引,索引中是将单个的汉字作为一个一个地词条。使用这个分析器,因为没有像“今天”这样两个汉字组成词条,所以要想单独按照索引中的词条进行检索是不可能查询出任何结果的。当然,有很多方案可以选择,其中MultiPhras...原创 2009-02-06 15:03:31 · 181 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(34)
关于PhraseQuery。PhraseQuery查询是将多个短语进行合并,得到一个新的词条,从索引库中检索出这个复杂的词条所对应的目标数据文件。举个例子:假如用户输入关键字“网络安全”,如果索引库中没有单独的“网络安全”这个词条,但是具有“网络”和“安全”这两个词条,我们可以使用PhraseQuery进行查询,将“网络”和“安全”这两个词条合并后能够检索出匹配“网络安全”的所有词条对应的结果...原创 2009-02-06 15:02:24 · 111 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(33)
关于范围查询RangeQuery。RangeQuery是由两个词条作为上界和下界进行查询,同时指定了一个Boolean型参数,表示是否包括边界,这可以从RangeQuery的构造方法看到: public RangeQuery(Term lowerTerm, Term upperTerm, boolean inclusive) { if (lowerTerm == nu...原创 2009-02-06 15:01:25 · 212 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(32)
关于SpanQuery(跨度搜索),它是Query的子类,但是SpanQuery仍然是一个抽象类,它有6个直接子类实现类。继承关系如图所示:其中SpanTermQuery是一个最基础的跨度搜索实现类,SpanTermQuery与SpanQuery的关系,就如同TermQuery与Query的关系:SpanTermQuery是为SpanQuery其它的具体实现子类服务的,其实TermQuery也...原创 2009-02-06 15:00:18 · 116 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(31)
关于前缀查询PrefixQuery(前缀查询)。准备工作就是为指定的数据源文件建立索引。这里,我使用了ThesaurusAnalyzer分析器,该分析器有自己特定的词库,这个分词组件可以从网上下载。PrefixQuery其实就是指定一个词条的前缀,不如以前缀“文件”作为前缀的词条有很多:文件系统、文件管理、文件类型等等。但,是在你要检索一个有指定的前缀构成的词条(只有一个前最也是一个词条)时,...原创 2009-02-06 14:58:59 · 125 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(30)
关于Query的学习。主要使用TermQuery和BooleanQuery,它们是最最基础的Query。我感觉Query的灵活性太大了,这就使得它那么地具有魅力。当用户提交了检索关键字以后,首先就是要根据这个关键字进行分析,因为不同的用户提交的关键词具有不同的特点,所以使用不同方式来构造Query是极其关键的,从而使提供的检索服务最大程度地满足用户的意愿。先看看Query抽象类的继承关系,...原创 2009-02-06 14:57:37 · 200 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(29)
关于IndexSearcher检索器。在学习IndexSearcher检索器之前,先大致了解一下下面几项:1、首先,要知道Weight(接口)存在的目的:使得检索不改变一个Query,使得Query可以重用。所以就出现了Weight,一个Weight可以保存与某次检索相关的IndexSearcher检索器的独立状态值。其实Weight间接保存了IndexSearcher索引器的独立状态信息。...原创 2009-02-06 14:54:10 · 269 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(28)
关于检索的核心IndexSearcher类。IndexSearcher是Lucene的检索实现的最核心的实现类,它继承自抽象类Searcher,该抽象类中包含了用于检索的一些核心的方法的实现。而Searcher抽象类有实现了Searchable接口,Searchable接口是实现检索的抽象网络协议,可以基于此协议来实现对远程服务器上的索引目录的访问。这一点,可以从Searchable接口所继承的...原创 2009-02-06 14:48:00 · 168 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(27)
关于Lucene的检索(IndexSearcher)的内容。通过一个例子,然后从例子所涉及到的内容出发,一点点地仔细研究每个类的实现和用法。先写一个简单的使用Lucene实现的能够检索的类,如下所示:package org.shirdrn.lucene;import java.io.IOException;import java.util.Date;import java.util.Lis...原创 2009-02-06 14:42:52 · 141 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(26)
如果在初始化一个IndexWriter索引器的时候,指定 useCompoundFile =false,则在指定的索引目录中生成的索引文件就不是.cfs复合索引文件。通过这种方式生成的索引文件,它的不同格式表明了它锁存储的关于索引的不同内容。至少,明确了在建立索引过程中,经过加工处理的数据究竟去向如何,能够加深对Lucene索引过程的理解。通过在文章 Lucene-2.2.0 源代码阅读学习...原创 2009-02-06 14:36:16 · 182 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(36)
关于MultiTermQuery查询。这里研究FuzzyQuery查询。MultiTermQuery是一个抽象类,继承自它的一种有3个,分别为:FuzzyQuery、WildcardQuery、RegexQuery,其中RegexQuery使用了第三方提供的服务,可以使用正则表达式,如果你对正则表达式很熟悉,可以尝试着使用RegexQuery查询。FuzzyQuery查询,即模糊查询。在F...原创 2009-02-06 15:05:09 · 292 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(37)
关于MultiTermQuery查询。这里研究继承自MultiTermQuery的WildcardQuery查询。WildcardQuery查询,就是使用通配符进行查询,通配符可以使用“*”和“?”这两种:“*”可以代表0~N个字符串,“?”只能代表一个字符串,而且它们可以在一个词条Term的任何位置出现,从WildcardQuery的构造方法中可以看出:public WildcardQue...原创 2009-02-06 15:06:14 · 122 阅读 · 0 评论 -
SQLServer2005获取大数据集时内存不足的解决办法
今天在修改search的建立索引的程序的时候,发现了这个错误 使用jdbc读取SQLServer2005的一个表全部记录,该表具有10W记录,结果发生以下错误:Java代码 com.microsoft.sqlserver.jdbc.SQLServerException: 系统内存不足。请对大型 ResultSet 使用服务器端游标: Java heap space。ResultSe...原创 2009-02-12 10:59:28 · 312 阅读 · 0 评论 -
使用Lucene的Highlighter实现文件摘要的自动提取
使用Lucene自带的Highlighter就可以实现对原始文件摘要的提取工作。Highlighter类有一个getBestFragment方法,这个方法有多个重载的方法,其中,使用:public final String getBestFragment(Analyzer analyzer, String fieldName,String text)就可以提取摘要,它实现了从指定的原始文件中,...原创 2009-02-06 16:52:45 · 233 阅读 · 0 评论 -
Lucene倒排索引原理
Lucene是一个高性能的java全文检索工具包,它使用的是倒排文件索引结构。该结构及相应的生成算法如下: 0)设有两篇文章1和2 文章1的内容为:Tom lives in Guangzhou,I live in Guangzhou too. 文章2的内容为:He once lived in Shanghai. 1)由于lucene是基于关键词索引和查询的,首先我们要取得这两篇文章...原创 2009-02-06 16:08:36 · 204 阅读 · 0 评论 -
Lucene 2.2.0发布自带的HTMLParser的使用
Lucene 2.2.0发行包中自带的org.apache.lucene.demo包中,有一个为HTML和TXT文件建立索引、删除索引以及实现检索的实例,其中在org.apache.lucene.demo.html包中的一些类,是真正解析HTML文件的工具类,包括解析类、预定义类、异常处理类。这个例子的命令提示为:IndexHTML [-create] [-index <index&g...原创 2009-02-06 16:00:05 · 509 阅读 · 0 评论 -
Lucene关键字高亮显示
在Lucene的org.apache.lucene.search.highlight包中提供了关于高亮显示检索关键字的工具。使用百度、Google搜索的时候,检索结果显示的时候,在摘要中实现与关键字相同的词条进行高亮显示,百度和Google指定红色高亮显示。有了Lucene提供的高亮显示的工具,可以很方便地实现高亮显示的功能。高亮显示,就是根据用户输入的检索关键字,检索找到该关键字对应的检索结...原创 2009-02-06 15:53:24 · 667 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(42)
关于Hits类。这个Hits类可是非常的重要,因为Lucene使用了缓存机制,关于缓存的实现就是在这个Hits类中。Hits工作过程中,使用了LRU算法,即通过一个HitDoc结构来实现一个双向链表,使用LRU置换算法,记录用户最近访问过的Document。开门见山,直接拿出Hits类的实现代码来说话。package org.apache.lucene.search;import java.io....原创 2009-02-06 15:46:23 · 164 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(41)
当执行Hits htis = search(query);这一行代码的时候,到底中间经过了怎样的过程,最终使得我们获取到了含有检索结果的集合Hits hits呢?这里,以最简单的检索为例,追踪并理解Lucene(2.2.0版本)获取到检索结果的过程。1、IndexSearcher继承自Searcher类的最简单的search方法,如下所示:public final Hits search(Q...原创 2009-02-06 15:40:10 · 195 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(40)
关于Lucene检索结果的排序问题。已经知道,Lucene的默认排序是按照Document的得分进行排序的。当检索结果集中的两个Document的具有相同的得分时,默认按照Document的ID对结果进行排序。下面研究几种设置/改变检索结果排序的方法。■ 改变Document的boost(激励因子)改变boost的值实现改变检索结果集的排序,是最简单的方法,只需要在建立索引的过程中,设置指...原创 2009-02-06 15:34:00 · 192 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(39)
关于Lucene得分的计算。在IndexSearcher类中有一个管理Lucene得分情况的方法,如下所示:public Explanation explain(Weight weight, int doc) throws IOException { return weight.explain(reader, doc);}返回的这个Explanation的实例解释了Lucene中Doc...原创 2009-02-06 15:31:01 · 171 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(38)
关于QueryParser。QueryParser是用来解析用户输入的查询的,将用户的输入的短语进行分析,从而提交Query查询来实现检索。QueryParser一共有三个构造方法,我们通过使用如下的构造方法:public QueryParser(String f, Analyzer a) { this(new FastCharStream(new StringReader("")))...原创 2009-02-06 15:13:40 · 155 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(25)
复合索引文件格式(.cfs)是如何产生的?从这个问题出发,研究索引文件是如何合并的,这都是IndexWriter类中定义的一些重要的方法。在建立索引过程中,生成的索引文件的格式有很多种。在文章 Lucene-2.2.0 源代码阅读学习(4) 中测试的那个例子,没有对IndexWriter进行任何的客户化设置,完全使用Lucene 2.2.0默认的设置(以及,对Field的设置使用了Lucene...原创 2009-02-06 14:24:28 · 194 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(24)
阅读了这么多代码,该综合总结一下了。通过在文章 Lucene-2.2.0 源代码阅读学习(4) 中的那个例子,跟踪一下一个IndexWriter索引器实例化过程,及其建立索引的过程中都经过了哪些处理(主要看涉及到了哪些类来完成建立索引的强大功能)。在文章 Lucene-2.2.0 源代码阅读学习(4) 中的主函数如下所示:public static void main(String[] ar...原创 2009-02-06 14:06:36 · 244 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(23)
通过对DocumentWriter类的writePostings()方法进行学习。同时,研究并解决几个我一直感到困惑的几个类的用途,以及到底怎样阐述能使自己有一种感性的认识。 writePostings()方法的实现writePostings()方法是对已经经过倒排的文档,将词条的一些有用信息写入到索引段文件中。该方法的实现如下所示:private final void write...原创 2009-02-06 11:16:39 · 136 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(10)
Lucene的CJKAnalyzer分析器。CJKAnalyzer分析器的思想:对中文汉字,每两个字作为一个词条,例如A,B,C,D是四个中文汉字,使用CJKAnalyzer分析器分词后一共得到三个词条如下:AB,BC,CD。其实,CJKAnalyzer分析器在对中文分词方面比StandardAnalyzer分析器要好一点。因为根据中文的习惯,包括搜索的时候键入关键字的习惯,中文的词(大于...原创 2009-02-03 10:48:59 · 162 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(9)
Lucene的StandardAnalyzer分析器。不同的Lucene分析器Analyzer,它对TokenStream进行分词的方法是不同的,这需要根据具体的语言来选择。比如英文,一般是通过空格来分割词条,而中文汉字则不能通过这种方式,最简单的方式就是单个汉字作为一个词条。TokenStream是通过从设备或者其他地方获取数据源而构造的一个流,我们要执行分词的动作,应该对这个TokenSt...原创 2009-02-03 10:35:09 · 248 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(8)
Lucene分析器的实现。Lucene(分词)过滤器TokenFilter类,以及继承它的子类的实现类。TokenFilter类的继承关系,如图所示:TokenFilter是一个抽象类,定义了对一个经过分词(Tokenizer)后的TokenStream进行过滤的功能,它的源代码如下所示:package org.apache.lucene.analysi...原创 2009-02-03 09:50:07 · 134 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(7)
CharTokenizer是一个抽象类,它主要是对西文字符进行分词处理的。常见的英文中,是以空格、标点为分隔符号的,在分词的时候,就是以这些分隔符作为分词的间隔符的。package org.apache.lucene.analysis;import java.io.IOException;import java.io.Reader;// CharTokenizer 是一个抽象类public ...原创 2009-02-02 17:44:30 · 168 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(6)
Lucene分析器的实现。Lucene分词器Tokenizer,它的继承子类的实现。Tokenizer类的继承关系,如图所示:ChineseTokenizer类实现中文分词中文分词在Lucene中的处理很简单,就是单个字分。它的实现类为ChineseTokenizer,在包org.apache.lucene.analysis.cn中,源代码如下:package org.apache.l...原创 2009-02-02 17:41:11 · 116 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(5)
研究Lucene分析器的实现。Analyzer抽象类所有的分析器的实现,都是继承自抽象类Analyzer,它的源代码如下所示:package org.apache.lucene.analysis;import java.io.Reader;public abstract class Analyzer {// 通过Field的名称,和一...原创 2009-02-02 16:37:54 · 175 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(4)
建立索引,通过已经生成的索引文件,实现通过关键字检索。写了一个类MySearchEngine,根据上述思想实现,把Lucene自带的递归建立索引的方法提取出来,加了一个搜索的方法:package org.shirdrn.lucene;import java.io.File;import java.io.FileNotFoundException;import java.io.IOExcep...原创 2009-02-02 16:12:43 · 135 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(3)
org.apache.lucene.demo.IndexFiles类中,使用递归的方式去索引文件。在构造了一个IndexWriter索引器之后,就可以向索引器中添加Doucument了,执行真正地建立索引的过程。遍历每个目录,因为每个目录中可能还存在目录,进行深度遍历,采用递归技术找到处于叶节点处的文件(普通的具有扩展名的文件,比如my.txt文件),然后调用如下代码中红色...原创 2009-02-02 14:18:12 · 75 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(2)
IndexWriter是一个非常重要的工具。建立索引必须从它开始。而且,从它的构造函数开始。Document和Field是Lucene中两个最重要的概念。在建立索引的时候,也就是实例化一个索引器IndexWriter的之前,必须通过已经建立好的Document逻辑文件,将Document的对象添加到IndexWriter实例中,才能算是建立索引。Document汇集数据源,这个数据源是通过Fi...原创 2009-02-02 13:58:22 · 127 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(1)
package org.apache.lucene.demo;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.index.IndexWriter;import java.io.File;import java.io.FileNotFoundException;import ...原创 2009-02-02 13:44:51 · 79 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(11)
对数据源进行分析,是为建立索引服务的;为指定的文件建立索引,是为检索服务的。对数据源分析,使用Lucene的分析器(Analyzer),根据分析器所得到的词条,构造一个索引器IndexWriter。索引器IndexWriter的功能主要就是创建索引,是建立索引工作中最核心的。当构造完一个索引器IndexWriter之后,就可以向其中添加Document了。在前面Lucene-2.2.0 源代...原创 2009-02-03 11:12:00 · 118 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(12)
接着昨天学习的Lucene-2.2.0 源代码阅读学习(11)继续学习。IndexWriter的一个构造器,定义如下所示:public IndexWriter(String path, Analyzer a, boolean create) throws CorruptIndexException,...原创 2009-02-03 13:33:17 · 134 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(22)
关于FieldInfos类和FieldInfo类。FieldInfo类与一个Document中的一个Field相对应,而FieldInfos类又是多个FieldInfo的容器,对每个Document的所有Field对应的FieldInfo进行管理。FieldInfos类和FieldInfo类之间的关系,恰似SegmentInfos类(可以参考文章 Lucene-2.2.0 源代码阅读学习(18...原创 2009-02-06 11:09:28 · 132 阅读 · 0 评论 -
Lucene-2.2.0 源代码阅读学习(21)
回到IndexWriter索引器类中来,学习该类添加Document的方法。这时,需要用到一个非常重要的类:DocumentWriter,该类对Document进行了很多处理,比如“文档倒排”就是其中的一项重要内容。实例化一个IndexWriter索引器之后,要向其中添加Document,在IndexWriter类中有两个实现该功能的方法:public void addDocument(Do...原创 2009-02-06 10:59:48 · 117 阅读 · 0 评论