Lucene搜索实现过程细节.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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。 其

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档