欢迎来到天天文库
浏览记录
ID:20277833
大小:84.00 KB
页数:12页
时间:2018-10-10
《lucene搜索实现过程详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、lucene搜索实现过程详解郭玉璞2008-05-05一.文档说明1.关于lucene索引生成过程和生成文件结构,在《关于lucene建立索引的详细过程及相关文件结构》一文中已经说明,本文涉及到的文件结构,请参考该文档,这里不再累赘,并且我们假设您已经对索引文件格式有了一定的了解。2.为了对搜索的实现过程有一个清晰的认识,本文采用分级的形势,层层深入。3.对于分词这一块,将有专题讲解,本文在不影响理解的情况下,没有详解。二.搜索过程简介索引的过程主要分为以下几个步骤:1.打开索引文件,并将索引文件的相关信息读入。代码如下:IndexR
2、eaderreader=IndexReader.Open("index");其中,index为索引文件所在的文件夹名称。该句执行完以后,索引文件的相关信息将存放在reader中。2.实例化IndexSearcher,以便于后面的搜索操作。代码如下:IndexSearchersearcher=newIndexSearcher(reader);该句执行完后,索引文件信息将存放在searcher中,后面的的搜索将运用searcher,而不是运用reader。当然,初始化方式有很多种,这里就以代码所示为例。3.声明查询分析器QueryPase
3、r。代码如下:QueryParserparser=newQueryParser(field,analyzer);其中,field为要查询的字段,analyzer为所选择的分析器。4.设置Query间的逻辑关系。代码如下:parser.SetDefaultOperator(QueryParser.Operator.AND);该句的功能是,如果用户以空格隔开两个字符串,设置这两个字符串之间的关系,代码所示的是与的关系,根据需要也可以设置成OR等关系。此句可有可无,Lucene默认的是OR的关系。5.生成Query子对象。代码如下:Quer
4、yquery=parser.Parse(strQuery);其中,strQuery为用户输入的待查询的字符串。该句的主要功能是将用户输入的字符串进行分词,并记录每个Token之间的位置关系,以便于后面的查询。当然,Lucene允许用户直接创建Query,也允许用户采用多种方法构建Query。例如:按词条搜索—TermQuery、“与或”搜索—BooleanQuery、在某一范围内搜索—RangeQuery、使用前缀搜索—PrefixQuery、多关键字的搜索—PhraseQuery、使用短语缀搜索—PhrasePrefixQuery、
5、相近词语的搜索—FuzzyQuery、使用通配符搜索—WildcardQuery。各种方法原理相同,都是将各单个Query搜索,然后再将各自结果按照“与”或者“或”的关系得出最终结果。在本文中,我们将以代码所示的简单方式为例。1.搜索,返回处理结果。代码如下:Hitshits=searcher.Search(query);在该句中,不仅涉及搜索的过程,而且还有排序、过滤等过程。7.根据搜索生成的内部编号,返回真正的结果。代码如下:Documentdoc=hits.Doc(i);一.搜索过程详解。1.IndexReaderreader=
6、IndexReader.Open("index");该句调用IndexReader的Open方法:publicstaticIndexReaderOpen(System.Stringpath){returnOpen(FSDirectory.GetDirectory(path,false),true);}1.1FSDirectory.GetDirectory(path,false),该方法获取索引文件夹的完全路径和创建临时文件路径。其中,path为索引文件所在文件夹的名称,false表示不要创建新的文件夹。该方法调用FSDirectory
7、的GetDirectory方法:publicstaticFSDirectoryGetDirectory(System.Stringpath,boolcreate){returnGetDirectory(newSystem.IO.FileInfo(path),create);}1.1.1GetDirectory(newSystem.IO.FileInfo(path),create);该方法是获取文夹完整路径的核心方法,其他方法都调用此方法。首先,通过语句file=newSystem.IO.FileInfo(file.FullName);
8、获得索引文件所在文件夹的完整路径到file。其次,根据file创建临时文件将要存放的路径:FSDirectorydir;dir=(FSDirectory)DIRECTORIES[file];dir=(FSDirector
此文档下载收益归作者所有