- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
搜索引擎开发实践全文检索与Lucene简介
概 述 作业讲解:Lucene源代码项目 倒排索引的原理 Lucene的整体结构 Lucene基本概念 Lucene3.0常用API的介绍与使用 Lucene中的压缩算法 作业讲解:Lucene源代码项目 从SVN下载Lucene源代码 TortoiseSVN Export /repos/asf/lucene/dev/trunk/lucene 把Lucene源代码导入Eclipse Lucene中的基本概念 索引(Index):文档的集合组成索引。和一般的数据库不一样,Lucene不支持定义主键,但Solr支持。 为了方便索引大量的文档,Lucene中的一个索引分成若干个子索引,叫做段(segment)。段中包含了一些可搜索的文档。 文档(Document):代表索引库中的一条记录。一个文档可以包含多个列(Field)。和一般的数据库不一样,一个文档的一个列可以有多个值。例如一篇文档既可以属于互联网类,又可以属于科技类。 列(Field):命名的词的集合。 词(Term) :由两个值定义——词语和这个词语所出现的列。 倒排索引是基于词(Term)的搜索。 Lucene的整体结构 索引相关类 向索引增加文档 一个索引和一个数据库表类似,但是数据库中是先定义表结构后使用。但Lucene在放数据的时候定义字段结构。 Document doc = new Document(); //创建网址列 Field f = new Field(“url”, news.URL , //news.URL 存放url地址的值 Field.Store.YES, Field.Index. NOT_ANALYZED,//不分词 Field.TermVector.NO); doc.add(f); //创建标题列 f = new Field(“title”, news.title , //news.title 存放标题的值 Field.Store.YES, Field.Index.ANALYZED,//分词 Field.TermVector.WITH_POSITIONS_OFFSETS);//存Token位置信息 doc.add(f); //创建内容列 f = new Field(“body”, news.body , //news.body 存放内容列的值 Field.Store.YES, Field.Index. ANALYZED, //分词 Field.TermVector.WITH_POSITIONS_OFFSETS); //存Token位置信息 doc.add(f); index.addDocument(doc); //把一个文档加入索引 查询语法 加权 solr^4 lucene 修饰符 + - NOT +solr lucene 布尔操作符 OR AND (solr OR lucene) AND user 按域查询 title:NBA QueryParser QueryParser将输入查询字串解析为Lucene Query对象。 QueryParser是使用JavaCC(Java Compiler Compiler )工具生成的词法解析器。 QueryParser.jj中定义了查询语法。 需要让QueryParser更好的支持中文,例如全角空格等? 分析器(Analyzer) 分析公司名的流程 Analyzer analyzer = new CompanyAnalyzer(); TokenStream ts = analyzer.tokenStream(“title, new StringReader(北京盈智星科技发展有限公司)); while (ts.incrementToken()) { System.out.println(token: +ts)); } 最基本的词条查询-TermQuery 一般用于查询不切分的字段或者基本词 IndexSearcher isearcher = new IndexSearcher(directory, true); //查询url地址列 Term term = new Term(url,); TermQuery query = new TermQuery(term); //返回前1000
文档评论(0)