-
lucene等搜索引擎解析
收藏lucene等搜索引擎解析
最近更新文章
搜索引擎开发lucene-笔者博客的大部分lucene习作源码
有一个小小较完整的实例,详见说明.txt
见附件,解压密码:http://deepfuture.javaeye.com/
lucene-内存索引、内存索引保存在硬盘、索引优化
索引代码
package bindex;
import jeasy.analysis.MMAnalyzer;import org.apache.lucene.analysis.PerFieldAnalyzerWrapper;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache ...
lucene-对hit结果提供的导航及过滤结果的缓存
1、导航
HitIterator hi=(HitIterator)(hs.iterator());
while(hi.hasnext());
{
Hit ht=(Hit)(hi.next());
.............
.............
.............
}
2、缓存
除了QueryFilter外的filter没有缓存,所以CachingWrapperFi ...
lucene-多字段、多索引搜索与多线程搜索
1、多字段搜索
1)
Term t1=new Term("title","会议");
TermQuery q1=new TermQuery(t1);
Term t2=new Term("context","交通部");
TermQuery q2=new TermQuery(t2);
BooleanQuery ...
lucene-queryparser的使用说明
1、使用queryparser完成解析搜索请求
2、基本格式如:
QueryParser parser=new QueryParser("字段名称","分析器实例");
Query q=parser.parse("关键词")
3、例如:解析一个关键字太阳
QueryParser parser=new QueryParser(&qu ...
lucene-索引过程和搜索过程的核心类
索引过程中的核心类
1、执行简单的索引需要以下几个类:
1)IndexWriter
是索引过程的核心组件,这个类用于创建一个新的索引并把文档加到已有的索 ...
lucene-索引文档的删除、更新及增强加权
1、删除
1)使用IndexReader类实现,这个类并没有立即从索引中删除文档,而只是在这些文档上加一个删除标记,直到IndexReader调用close()后才真正将它们删除。
2)
maxDoc()返回下一个可得到的文档的内部编号。
numDocs()返回索引中的文档数量。
文档编号从0开始
3)
public class DocumentDeleteTest extendsBa ...
lucene-索引日期与索引数字和排序
一、索引日期
1、Field.Keyword(String,Date)方法和DateField类进行索引
索引今天的日期可以这么做:
Document doc=new Document();
doc.add(Field.Keyword("indexDate",new Date()));
lucene内部使用了DateField类将日期转成字符串。
2、可以先转换为YY ...
lucene-可追加的域
假设有一个应用程序可以产生一个给定词语的一系列同义词,而你想使用Lucene来索引这个基本词和它所有的同义词。
StringbaseWord="fast";
Stringsynonys[]=String{"quick","rapid","speedy"};
Documentdoc=new Documnet();
...
lucene-调整索引性能
1、当新的Document对象增加到Lucene索引里时,它们最初将被缓存在内存中,而不是立刻写入磁盘中
2、IndexWriter提供了几个变量,用于调节缓存的大小和 ...
lucene-理解索引过程
1、索引一个文件调用lucene公用API的方法完成
2、
1)转换为文本:数据必须转换成Lucene能够处理的格式-纯文本字符流
提取的数据创建Lucene的Document对象及其对应的Field对象。
2)分析:完成了对索引数据的预处理,创建了带有若干域的Document对象,可以调用IndexWriter的addDocument(Document)方法,将数据传给Lucene进行 ...
lucene-替代品MG4J
搜索engine-MG4J
MG4J 是另一个搜索engine 。与Lucene 主要区别是,它提供了cluster 功能,具有更OO的设计方式。 MG4J可以让你为大量的文档集合构建一个被压缩的全文本索引,通过使内插编码(interpolativecoding)技术。 虽然MG4J(Managing Gigabytes forJava)不是一个像Lucene、Egothor和Xapi ...
lucene-限制域的大小maxFieldLength
1、有些应用程序会索引事先不知道大小的文档。为了控制应用程序对内存和虚拟内存的使用,限制输入索引的文档数量。有些则可能只需要索引每个文档中的一部分内容。
2、为了把域的大小限制在1000个项以内,某个应用程序也许会把maxFieldLength设置为1000。可以把它设置为Integer.MAX_VALUE。
3、MAXFieldLength的值可在索引过程中的任意时刻被修改,并对其后增加的 ...
lucene-利用内存中索引和多线程提高索引效率
1、RAMDirectory和FSDirectory对比
RAMDirectory在内存中所进行的操作比FSDirectory在磁盘上所完成的工作要快得多。
2、即使使用索引参数来使Lucene减少在磁盘上合并段的频率,基于FSDirectory的索引还要把它们写入磁盘,而RAMDirectory完全不用写磁盘。
3、将RAMDirectory做为一个缓冲器实现对索引的、批处理
1)创建 ...
lucene-优化索引
1、优化索引其实就是将多个索引文件合并成单个文件的过程,为了减少索引文件的数量级,能在搜索时减少读取索引文件的时间而进行的操作。
2、可通过调用IndexWriter的optimize()方法来优化一个索引。索引的优化过程涉及到很多磁盘的输入、输出操作,所以要恰当地进行索引的优化操作
3、优化索引过程中需要原来空间的2倍,完成后,磁盘空间会降回到优化前的状态。
4、优化操作的最佳时机是在索 ...
lucene-并发性
1、任意数量的只读操作可以同时执行。
2、在索引正在被修改时,我们可以同时执行任意数量的只读操作。
3、在某一时刻,只允许执行一个修改索引的操作。
lucene-线程安全性
1、lucene不允许使用多个IndexWriter或IndexReader实例同时对一个索引进行修改。但这2个类都是线程安全的
2、2个类的实例都可以被多线程共享,Lucene会对各个线程中所有对索引进行修改的方法的调用进行恰当的同步处理,以保证修改操作能一个接一个有序进行。
3、恰当的处理是指保证这2个类的对象对索引的修改操作不能重叠,使用IndexWriter对象将新文档增加到索引之前 ...
lucene的主要搜索API
类
用途
IndexSeacher
搜索操作的入口,所有搜索操作都是通过IndexSeacher实例使用一个重载的search方法来实现
Query(及其子类)
具体的Query子类为每一种特定类型的查询进行逻辑上的封装。Query实例被传递到IndexSearcher的search方法中
QueryParser
...
lucene-索引锁机制
1.在lucene中,锁机制是与并发性相关的一个主题,在同一时刻只允许单一进程的所有代码段中,lucene都创建了基于文件的锁,以此来避免误用lucene的api造成对索引的损坏。每个索引都有自身的锁文件集。锁文件放在计算机的临时目录中,这个目录由java的java.io.tmpdir中的系统属性所指定。
2.
1)IndexReader的isLocked(Directory)-这个方法可以 ...
lucene-使用QueryParser和IndexSearcher
QueryParser
QueryParser把查询表达式转换为lucene内置的查询类型
查询表达式
匹配的文档
java
默认域包含java项的文档
java junit
java or junit
默认域中包含java和junit中的一个或两个文档。
+java +junit
java AND junit
...