- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Lucene搜索实现过程细节
lucene搜索实现过程详解
郭玉璞 2008-05-05
文档说明
关于lucene索引生成过程和生成文件结构,在《关于lucene建立索引的详细过程及相关文件结构》一文中已经说明,本文涉及到的文件结构,请参考该文档,这里不再累赘,并且我们假设您已经对索引文件格式有了一定的了解。
为了对搜索的实现过程有一个清晰的认识,本文采用分级的形势,层层深入。
对于分词这一块,将有专题讲解,本文在不影响理解的情况下,没有详解。
搜索过程简介
索引的过程主要分为以下几个步骤:
打开索引文件,并将索引文件的相关信息读入。代码如下:
IndexReader reader = IndexReader.Open(index);
其中,index为索引文件所在的文件夹名称。该句执行完以后,索引文件的相关信息将存放在reader中。
实例化IndexSearcher,以便于后面的搜索操作。代码如下:
IndexSearcher searcher = new IndexSearcher(reader);
该句执行完后,索引文件信息将存放在searcher中,后面的的搜索将运用searcher,而不是运用reader。当然,初始化方式有很多种,这里就以代码所示为例。
声明查询分析器QueryPaser。代码如下:
QueryParser parser = new QueryParser(field, analyzer);
其中,field为要查询的字段,analyzer为所选择的分析器。
设置Query间的逻辑关系。代码如下:
parser.SetDefaultOperator(QueryParser.Operator.AND);
该句的功能是,如果用户以空格隔开两个字符串,设置这两个字符串之间的关系,代码所示的是与的关系,根据需要也可以设置成OR等关系。此句可有可无,Lucene默认的是OR的关系。
生成Query子对象。代码如下:
Query query = parser.Parse(strQuery);
其中,strQuery为用户输入的待查询的字符串。该句的主要功能是将用户输入的字符串进行分词,并记录每个Token之间的位置关系,以便于后面的查询。
当然,Lucene允许用户直接创建Query,也允许用户采用多种方法构建Query。例如:按词条搜索—TermQuery、“与或”搜索—BooleanQuery、在某一范围内搜索—RangeQuery、使用前缀搜索—PrefixQuery、多关键字的搜索—PhraseQuery、使用短语缀搜索—PhrasePrefixQuery、相近词语的搜索—FuzzyQuery、使用通配符搜索—WildcardQuery。各种方法原理相同,都是将各单个Query搜索,然后再将各自结果按照“与”或者“或”的关系得出最终结果。在本文中,我们将以代码所示的简单方式为例。
搜索,返回处理结果。代码如下:
Hits hits = searcher.Search(query);
在该句中,不仅涉及搜索的过程,而且还有排序、过滤等过程。
7.根据搜索生成的内部编号,返回真正的结果。代码如下:
Document doc = hits.Doc(i);
搜索过程详解。
1.IndexReader reader = IndexReader.Open(index);该句调用IndexReader的Open方法:
public static IndexReader Open(System.String path)
{
return Open(FSDirectory.GetDirectory(path, false), true);
}
1.1 FSDirectory.GetDirectory(path,false),该方法获取索引文件夹的完全路径和创建临时文件路径。其中,path为索引文件所在文件夹的名称,false表示不要创建新的文件夹。该方法调用FSDirectory的GetDirectory方法:
public static FSDirectory GetDirectory(System.String path, bool create)
{
return GetDirectory(new System.IO.FileInfo(path), create);
}
1.1.1 GetDirectory(new System.IO.FileInfo(path), create);该方法是获取文夹完整路径的核心方法,其他方法都调用此方法。
首先,通过语句file = new System.IO.FileInfo(file.FullName);获得索引文件所在文件夹的完整路径到file。
其
您可能关注的文档
最近下载
- 2025电动航空器电推进系统动力电机技术规范.docx VIP
- DB37╱T 3655-2019 化工园区大气环境风险监控预警系统技术指南(试行).pdf VIP
- 百灵达FLOW-8快速使用说明书.pptx VIP
- 化工园区危险品运输车辆停车场建设标准.pdf VIP
- 《党政机关厉行节约反对浪费条例》专题党课PPT课件模板.pptx VIP
- T/HGJ 10600-2019 烧碱装置安全设计标准.docx VIP
- 最新清晰版ISO50001(中word版).docx VIP
- 临床医学 《门静脉高压症》教学课件.ppt VIP
- 最新:机械通气患者转运课件.pptx VIP
- (高清版)DB44∕T 2598-2024 《省级体育社会团体建设规范》.pdf VIP
文档评论(0)