-
lucene等搜索引擎解析
收藏lucene等搜索引擎解析
最近更新文章
lucene-使用PhrasePrefixQuery和多个域上的查询
1、类PhrasePrefixQuery是一种可以适合于特殊应用的Query类型,但事实上这个类却有很多其他的用途。允许多个项对应于同一个位置,就像一个BooleanQuery对象可以对应于多个逻辑或的PhraseQuery子句一样。
public class PhrasePrefixQueryTest extends TestCase{
private IndexSearchersearc ...
lucene-对搜索结果进行排序
1、在IndexSearcher类中包含了几个可重载的search方法,有一个对结果进行排序的search方法声明为
search(Query,Sort)
public classSortingExample{
private Directory directory; ...
lucene-SpanQuery跨度查询基础
1、跨度查询SpanQuery5个子类
SpanQuery类型描述
SpanTermQuery和其他跨度查询结合使用,单独使用相当于TermQuery
SpanFirstQuery用来匹配域中的第一个部分内的 ...
lucene-SpanFirstQuery 和SpanNearQuery 跨度查询
1、SpanFirstQuery查询
对出现在一个域中前n个位置的跨度查询。
public void testSpanFirstQuery() throws Exception{
SpanzFirtsQuery sfq=new SpanFirstQuery(brown,2);
assertNoMatches(sfq);//前2个位置的跨度无法匹配
sfq=newSpanFirstQuery ...
lucene-SpanNotQuery和SpanOrQuery交迭与全局跨度
1、在匹配结果中排除相互交迭的跨度
SpanNotQuery构造函数的第一个参数表示要包含的跨度对象,第二个参数表示要排除的跨度对象。
1)
SpanNearQuery quick_fox=new SpanNearQuery(newSpanQuery[]{quick,fox},1,true);
dumpSpans查询时输出
the <quick brown fox> jum ...
lucene-搜索过滤
1、使用过滤可以缩小搜索空间,把可能的搜索匹配结果限制在所有文档的一个子集中。
2、内置了三个Filter子类:
1)DateFilter使搜索只限于指定的日期域的值在某一时间范围内的文档空间里
2)QueryFilter把查询结果做为另一个新查询可搜索的文档空间
3)CachingWrappperFilter是其他过滤器的装饰器,将结果缓存起来以便再次使用,从而提高性能。
3、Dat ...
lucene-对多个索引的搜索和多线程搜索
1、如果应用程序架构由多个LUCENE索引组成,则可以通过MutltiSearcher把所有索引搜索。也可以通过ParallelMultiSearcher进行多线程搜索。在单核的情况下,Mult ...
lucene-使用自定义排序方法
计算基点与索引库中每个地理位置的距离,按距离大小排序。基点为(0,0),计算从(0,0)到地图中各个地方的距离,然后依此排序,但地方进行了分类,包括restaurant、school、shop。这些类放在一个type域中,
1、通过实现SortComparatorSource接口来完成自定义排序。对每个类分别完成计算基点到这些类的地方的距离
public class DistanceCompar ...
lucene-使用项向量
1、项向量是一组由项-频率对组成的集合。
1)设一个文档只包括cat和dog两个项,一共有2个文档,向量可表示为图形上的有方向的直线,一个向量就是一 ...
lucene-编写HitCollector直接访问搜索结果
使用直接方式访问搜索结果中每个文档的内容是比hits中采用缓存方式(遍历返回的所有hits对象)性能更好的办法,使用自定义的HitCollector来实现
假设要对返回的所有书将其与URL匹配,对每个文档都要访问,
public classBookLinkCollector extendsHitCollector{
private IndexSearcher searcher;
privat ...
lucene-性能
1、FuzzyQuery和WildcardQuery可能会导致失控。
2、RangeQuery对某个范围内的所有项进行枚举时,可能会形成大量查询子句的BooleanQuery。所以最多接收1024个文档
3、修改索引,使RangeQuery的范围缩小到1024以内
lucene-扩展QueryParser
1、FuzzyQuery和WildcardQuery可能会导致失控。
2、RangeQuery对某个范围内的所有项进行枚举时,可能会形成大量查询子句的BooleanQuery。所以最多接收1024个文档
3、修改索引,使RangeQuery的范围缩小到1024以内
lucene-用SAX API进行XML解析并索引
1、对XML进行解析使用XML(SAX)的API定义了一个事件驱动的接口。在这个接口中,当某个分析事件发生时,解析器会调用几个方法中的一个响应,而这些方法是由调用程序提供的。这些触发事件包括文档或文档的开始、结束或解析出错。
2、我们使用Xerces2 Java Parser解析器。
3、
XML文档片段
<?xml version='1.0'encoding='utf-8'?&g ...
lucene-使用Digester分析XML索引
1、隶属于Jakarta Commons项目的一个子项目提供了一个简单的上层接口来将XML类型的文档映射为JAVA对象。
2、DigesterXMLHandler类用来解析XML格式的文档。
public class DigesterXMLHandler implements DocumentHandler{
private Digester dig;
private static Do ...
lucene-索引HTML文档
1、大部分WEB文档采用HTML格式。
2、本例用如下HTML文档
<html>
<head>
<title>
Laptop power supplies are avaliable in First class only
</title>
</head>
<body>
<h1>code,wri ...
lucene-索引word文档
1、通过POI项目来索引。
public class POIWordDocHandler implements DocumentHandler{
public Document getDocument(InputStream is)throws DocumentHandlerException{
StringbodyText=null;
try{//提取文本字段,接收word文档的inp ...
lucene-索引纯文本文档
1、实现纯文本文档的DocumentHandler接口
2、
public class PlainTextHandler implements DocumentHandler
throws DocumentHandlerException{
String bodyText="";
try{
BufferReader br=new BufferedReader(ne ...
lucene-索引RTF文档
1、对RTF进行文本提取操作时可以使用部分JAVA标准类处理(javax.swing.text和javax.swing.text.rtf)
2、
public class JavaBuiltInRTFHanlder implementsDocumentHandler{
public DocumentgetDocument(InputSream is)throws DocumentHandle ...
lucene-创建文档索引处理框架
1、组成文件索引操作框架的JAVA类
1)DocumentHandler:定义getDocument(InputStream)方法,此方法由所有的文档解析器实现
2)DocumentHandlerException:遇到错误情况时,该类将检测所有从文档解析器抛出的异常
3)FileHanlder:定义getDocument(File)方法,该方法由ExtensionFleHandler类实 ...
lucene-sandbox工具包
主要组成如下:
1)analyzers:对各种不同语言的分析器
2)ant:Ant<index>任务
3)db:Berkeley DB目录的实现
4)highlighter:高度显示搜索结果中的片断
5)javascript:为web浏览器进行交互的命令行接口
6)lucli:与索引文件进行交互的命令行接口
7)miscellanceous:包含ChainedFilter在 ...