搜索引擎解密.ppt
《搜索引擎解密.ppt》由会员分享,可在线阅读,更多相关《搜索引擎解密.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、搜索引擎解密 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望搜索引擎结构搜索引擎结构文档文本提取索引程序索引库(Lucene)搜索查询服务器(Solr)文件数据库爬虫NBA搜索Lucene是什么是什么包括全文索引库简单的语言解析功能不包括爬虫文档格式解析“PageRank”等排序算法Lucene来源与发展来源与发展1999 Cutting 开发的第一个Java程序2001 捐赠给Apache2004年11月 1.4.3版本2008年10月 2.4.0版本2009年
2、11月 3.0.0版本Lucene的用户的用户国际TwitterIBMLinkedIn 捐出分类统计的子项目bobo-browse和实时搜索的项目Zoie国内凤凰网敦煌网豆丁人工编的名词人工编的名词索引索引-方便查找方便查找全文索引结构全文索引结构12435词:词:文档文档:北京武汉天津上海大连Lucene中的倒排索引中的倒排索引索引相关类索引相关类DocumentAnalyzerIndexWriterField(Title)通过IndexWriter来写索引,通过IndexReader读索引。一段有意义的文字需要通过Analyzer分割成一个个词语后才能按关键词搜索。Analyzer就是分析
3、器,StandardAnalyzer是Lucene中最常用的分析器。TokenStream实例保存着当前的Attribute状态。Attribute 是一个接口,实现中包含一个代表词本身含义的字符串和该词在文章中相应的起止偏移位置,Attribute还可以用来存储词类型或语义信息。一个Document代表索引库中的一条记录。要搜索的信息封装成Document后通过IndexWriter写入索引库。调用Searcher接口按关键词搜索后,返回的也是一个封装后的Document的列表。一个Document可以包含多个列,叫做field。例如一篇文章可以包含“标题”、“正文”、“修改时间”等fiel
4、d,创建这些列对象以后,可以通过Document的add方法增加这些列。Field(Body)Field(URL)AnalyzerAnalyzer analyzer=new StandardAnalyzer();/or any other analyzerTokenStream ts=analyzer.tokenStream(myfield,new StringReader(some text goes here);while(ts.incrementToken()System.out.println(token:+ts);创建索引创建索引/创建新的索引或者对已有的索引增加文档index=ne
5、w IndexWriter(indexDirectory,new StandardAnalyzer(Version.LUCENE_CURRENT),!incremental,IndexWriter.MaxFieldLength.UNLIMITED);File dir=new File(sSourceDir);indexDir(dir);/索引路径 index.optimize();/索引优化 index.close();/关闭索引库向索引增加文档向索引增加文档Document doc=new Document();/创建网址列Field f=new Field(url,news.URL,Fie
6、ld.Store.YES,Field.Index.NOT_ANALYZED,/不分词 Field.TermVector.NO);doc.add(f);/创建标题列f=new Field(title,news.title,Field.Store.YES,Field.Index.ANALYZED,/分词 Field.TermVector.WITH_POSITIONS_OFFSETS);/存Token位置信息doc.add(f);/创建内容列f=new Field(body,news.body,Field.Store.YES,Field.Index.ANALYZED,/分词 Field.TermVe
7、ctor.WITH_POSITIONS_OFFSETS);/存Token位置信息doc.add(f);index.addDocument(doc);搜索搜索/read-only=trueIndexSearcher isearcher=new IndexSearcher(directory,true);/Parse a simple query that searches for text:QueryParser parser=new QueryParser(Version.LUCENE_CURRENT,fieldname,analyzer);Query query=parser.parse(t
8、ext);/返回前1000条搜索结果ScoreDoc hits=isearcher.search(query,1000).scoreDocs;/遍历结果for(int i=0;i hits.length;i+)Document hitDoc=isearcher.doc(hitsi.doc);System.out.println(hitDoc.get(fieldname);isearcher.close();directory.close();常用查询常用查询Query说明用法TermQuery最基本的词条查询查询不切分的字段或者基本词BooleanQuery布尔逻辑查询组合条件查询Phrase
9、Query短语匹配查询要求精确匹配的查询SpanQuery匹配位置相关的查询(跨度查询)字词混合查询FieldScoreQuery函数查询(通过数字型的字段影响排序结果)时间加权排序区间查询区间查询查询语法:time:2007-08-13T00:00:00Z TO 2008-08-13T00:00:00Z 调用代码:ConstantScoreRangeQuery dateQuery=new ConstantScoreRangeQuery(time,t1,t2,true,true);2.9以前版本区间查询的问题以前版本区间查询的问题 RangeQuery采用扩展成TermQuery来实现,如果查
10、询区间范围太大,RangeQuery会导致TooManyClausesExceptionConstantScoreRangeQuery 内部采用Filter来实现,当索引很大的时候,查询速度会很慢Trie结构实现的区间查询结构实现的区间查询Range4424442142344552144844652263526564632633644642641在Lucene2.9以后的版本中,用Trie结构索引日期和数字等类型。例如:把521 这个整数索引成为:百位是5、十位是52、个位是521。这样重复索引的好处是可以用最低的精度搜索匹配区域的中心地带,用较高的精度匹配边界。这样减少了要搜索的Term数量
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 搜索引擎 解密
限制150内