1:搜索引擎按原理和工作方式可分为:
A:爬虫式,主要用Socket实现,基于TCP/IP协议
B:目录索引式,以早期的yahoo为代表
C:元搜索引擎,即将多个搜索引擎的结果合并返回
2:按领域范围可分为:
A:通用搜索引擎---针对全互联网全部网站和各种数据信息,信息全,领域广
B:垂直搜索引擎---针对果某一行业,如企业库搜索,供求信息搜索,房产搜索等
3:信息类型分类:
二进制的文档,音频,视频,图片等。其中常见的二进制文档有:TXT,WORD,EXCEL,PPT,PDF,XML,HTML
4:著名的搜索引擎列表
A:Google,出现于1998年10月,由拉里.佩奇和谢尔盖.布林开创
B:AltaVista,用户需要熟悉搜索的各个选项,以得到更精确的结果
C:Yahoo,1994年4月发布,由美籍华人杨志远和David Filo共创,早期以第一代搜索引擎为主,人工输入,形成庞大的目录库,现在则是第二代搜索引擎,自动搜索并加入数据库
D:Baidu,2000年1月,由李彦宏开创
E:Sohu开创“搜狗”
F:Sina开创“爱问”
G:北大天网搜索
H:腾迅2006年成立“SOSO”
I:网易于2007年推出了自己的“网易有道”
------垂直搜索引擎------
A:奇虎论坛搜索
B:酷迅生活搜索
C:258商业搜索
D:去哪旅游搜索
E:职友网搜索
5:搜索引擎研究网站
搜狗实验室---http://www.sogou.com/labs/
6:搜索引擎算法
A:深度优先算法,B:广度优先算法,C:IP段扫描算法
7:网页分析过程
单词提取->标点符号去除->大小写转换->超高频词汇去除->中文分词->提取URL,EMAIL,真正意文的文本信息等
8:信息检索模型分类
A:布尔模型,B:向量模型,C:概率模型,D:混合模型等
9:搜索引擎通常要解决的基本问题
A:信息抓取,B:数据解析,C:索引创建,D:执行检索
10:你要知道什么叫“倒排索引”
以字或词做为索引,非常适合“关键词”搜索
11:当前主流的索引技术
A:倒排索引
B:反缀数组
C:签名文件
------------------------------------------------------------------------------------------------------------
Lucene常识总结
12:Lucene中的分词方法
(1)单词切分
A:对于English和Chinese,我们用StandardAnalyzer就可以了
B:ChineseAnalyzer
(2)二分法
对于中文,可用CJKAnalyzer,NGram(综合了单词切分和二分法)
注:StandardAnalyzer,ChineseAnalyzer,CJKAnalyzer,NGram相关的jar包在:
%LUCENE%/contrib/analyzers/lucene-analyzer-2.1.0.jar包中,视版本不同而异
(3)词典法
如IK分词器,实现了正反向全切分算法,它包括了两个分析器,MIK_CAnalyzer使用最大全切分算法和IKAnalyzer使用细粒度全切分算法,相关jar包为:IKAnalyzer.jar
(4)语义法
(5)基于词库,如JE分词器,可以向词库中添加新词,查看词,删除词,相关jar包为:je-analysis-1.5.1.jar
Plus:中科院有个分词器,是dll形式,在Java中必须借助JNI,这样效率和效果都不好,容易死机,不建议采用
(6)好了,说了这么多分词器,最后推荐大家用JE分词器,足够了
13:常用二进制文档解析组件
A:PDF---PDFBox,从http://sourceforge.net/projects/pdfbox/下载PDFBox类库并解压,将external和lib下的jar包全copy到你的应用程序/lib下
B:WORD---用POI的一个组件包,textmining,从http://mirrors.ibiblio.org/pub/mirrors/maven2/org/textmining/tm-extractors/0.4/下载tm-extractors-0.4.zip
C:EXCEL---JExcel,从http://www.andykhan.com/jexcelapi/下载
D:XML---DOM4J,从http://www.dom4j.org/下载
E:HTML---HTMLParser,从http://htmlparser.sourceforge.net/下载,我们需要filterbuilder.jar,htmlparser.jar,htmllexer.jar,thumbelina.jar
F:Lius,用于从各种文档中提取文本信息,只是对PPT文档,只能解析出英文
注:推荐使用Lius,
14:索引创建方式
静态索引,动态索引(增量索引)
IndexWriter indexWriter = new IndexWriter(indexPath, new SimpleAnalyzer(), false);
第三个参数的意思就是:是否覆盖原来的索引,false时为增量索引
15:索引结构:
多文件索引,复合索引
调用indexWriter.useCompoundFile(false),为多文件索引,默认true为附和索引
多文件索引时,会创建很多的文件,在打索引开时,会占用大量的文件句柄资源,造成系统响应慢。而复合索引则会成n倍的减少文件数量,但是,统一文件存储大量数据会造成数据更新比较慢
16:建议不用IndexModifier,它在close时并没有真正删除Document,最好自己封装IndexWriter和IndexReader
17:不要过度使用“过滤器”,会有不小的性能开销
18:Lucene的逻辑组成,个人理解
lucene索引由多个“索引块”(segment)组成,增量索引以新块形式出现,每个“索引块”由多个“文档”(document)组成,每个“文档”由多个“索引域”(field)组成,“分析器”对每个“索引域”进行分析,拆分成很多“索引项”,最终构成了lucene的索引
19:Lucene的物理组成,个人理解
A:通常所说的索引指的是:在某个目录下的所有索引文件
B:多文件索引在创建时,至少会有fdt,fdx,fnm,frq,nrm,prx,tii,tis(这8个可以称为一个索引段)和segments.gen,segments_*10(这两个为独一的)文件,可以有单段多文件索引,也可以有多段多文件索引
C:复合索引在创建时,会将以上8个文件合并,形成一个cfs文件,再加个两个独一的文件,所以,它也有单段复合索引和多段复合索引两种
D:此外,多文件索引和复合索引还可以共存,但只有两个独一文件
E:最后我们通过IndexWriter.optimize(),对所有的文件进行优化成3个文件,cfs,segments.gen和segments_*
------------------------------------------------------------------------------------------------------------
实用分类总结
20:我们大至可以分为:
A:索引的建立和优化
B:索引的管理
C:解析用户请求
D:组合多条件搜索
E:过滤结果,进行排序,高亮处理等
21:索引建立和优化
一:建立
(1)增量索引:IndexWriter indexWriter = new IndexWriter(indexPath, new SimpleAnalyzer(), false);
(2)复合索引:indexWriter.useCompoundFile(true)
(3)Field参数含义,Field field = new Field(名称,内容,存储方式,索引方式);
存储方式有三种:Field.Store.NO(不存储),Field.Store.YES(存储),Field.Store.Compress(压缩存储)
索引方式有四种:Field.Index.NO(不索引),Field.Index.TOKENIZED(分词并索引),Field.Index.UN_TOKENIZED(不分词索引),Field.Index.NO_NORMS(禁用分析器处理)
(4)对不同文档Document使用不同分析器indexWriter.addDocument(doc,new StandardAnalyzer());
(5)限制Field词条数量,indexWriter.setMaxFieldLength(200);
(6)由于lucene采用统一的文档形式,所以对于非格式文本我们需要提前格式化,如数字和时间,最好定长表示,不足的用0补充,以保证检索和排序的正确性
二:优化
(1)利用缓存,减少磁盘读写频率
A:indexWriter.setMergeFactor(10),每10个document合并为一个索引块,每10个索引块合并成一个大索引块,每10个大索引块合并成更大的索引块,依次类推
B:indexWriter.setMaxBufferedDocs(100),用更多的内存换取更快的索引
C:先建立内存索引,再写入磁盘,用RAMDirectory
D:用indexWriter.optimize()自身优化
(2)减少索引文件数量和大小
22:索引的管理
A:了解索引本身信息,我们需要了解HITS,HIT,Document各自的属性和方法,请参照相应的API
B:索引的删除,添加,更新(本质是先删除,后添加)
创建表态索引用和增量索引用:IndexWriter
删除和添加索引用:IndexReader
用IndexReader删除某个Document,只是做了删除标记,不参与检索,要用IndexWriter.optimize()将其物理删除
C:不同目录的索引合并,用indexWriter.addIndexes(Directory directory),先把其中一个索引读入内存后优化,再用此方法加入到另一FSDirectory参数的indexWriter中,优化并关闭,这样这实现了两个索引的合并
D:推荐用Luke,是一套lucene索引管理的软件
23:解析用户请求
A:自己写程序分析,提取用户输入的关键字
B:用lucene自己的QueryParser解析,默认是OR逻辑
24:组合多条件搜索
A:用BooleanQuery可以实现“多索引域”搜索
B:MultiSearcher虽然可以多索引搜索,但实质还是一个一个顺序进行的,可以用ParallelMultiSearcher实现多线程多索引搜索
C:在BooleanQuery中,不能只含有BooleanClause.Occur.MUST_NOT,否则,只会返回空的结果集
D:组合用QueryParser,TermQuery,BooleanQuery,RegexQuery足以满足检索需求,如下:
- String indexPath = "你的索引目录";
- String word_list[] = {"中国","北京"};
- String feild_list[] ={"feild_a","feild_b"};
- IndexSearcher indexSearcher = new IndexSearcher(indexPath);
- Analyzer analyzer = new StandardAnalyzer();
- BooleanQuery boolQuery = new BooleanQuery();
- for(int i = 0;i < 2;i++){
- QueryParser parser = new QueryParser(feild_list[i],analyzer);
- Query query = parser.parse(word_list[i]);
- boolQuery.add(query,BooleanClause.Occur.SHOULD);
- }
- //以上实现了对用户输入的数据实现了lucene自带的QueryParser解析
- //同时在相应的feild_a和feild_b索引域附进行检索
- Term ta = new Term("date","20090101");
- Term tb = new Term("date","20090131");
- RangeQuery rangeQuery = new RangeQuery(ta,tb,true);
- //日期以年月日方式,定才存储,这样才可以得到正确结果,true表示包括边界
- boolQuery.add(rangeQuery,BooleanClause.Occur.MUST);
- Hits hits = indexSearcher.search(boolQuery);
由此,我们可以实现,在用lucene自身QueryParser的前提下,
D-1:同一“索引域”中检索不同关键字
D-2:同一“索引域”中检索同一关键字
D-3:不同“索引域”中检索不同关键字
D-4:不同“索引域”中检索同一关键字
是不是够你一般的实际检索了!!
25:检索结果的过滤
A:QueryFilter带有缓存,其它的RangeFilter,PrefixFilter,ChainedFilter都不带有缓存,要用CachingWrapperFilter包装才可
B:尽量不用过滤器
C:两种过滤方式,一种是在搜索结果提取出来后过滤,另一种是把过滤条件加在搜索条件中,后者是其于前者的,由此可见,在搜索前加入太多搜索条件对性能有很大的影响,在有必要更精确的搜索时,还是建议使用前者吧
26:对检索结果进行排序
A:默认排序规则:得分-->时间
B:对多字段排序,如下
- SortField sf1 = new SortField("id",false);//升序
- SortField sf2 = new SortField("date",true);//降序
- SortField fields[] = new SortField[]{sf1,sf2};
- Sort sort = new Sort(fields);
- Hits hits = searcher.search(q,sort);//q是一个TermQuery
相关推荐
"搜索引擎学习资料"和"搜索引擎原理.pdf"这两个文件则可能提供了更广泛的信息检索和搜索引擎理论知识。PDF文件通常包含高质量的图像和排版,适合保存和分享学术资料。在这个PDF文档中,读者可以深入学习搜索引擎的...
搜索引擎的发展历程可以分为五个阶段:第一个阶段是传统搜索引擎的诞生和发展,第二个阶段是智能搜索引擎的出现和发展,第三个阶段是搜索引擎的深度学习和整合,第四个阶段是搜索引擎的云计算和大数据整合,第五个...
深度学习搜索引擎是一种融合了深度学习技术的现代搜索引擎,它能够通过理解自然语言、识别语义关系和模式,为用户提供更为精确和个性化的搜索结果。在Java环境下开发深度学习搜索引擎,可以利用Java的强大功能和丰富...
【搜索引擎课件介绍】是专为学习搜索引擎技术的人士准备的宝贵资料,旨在帮助学习者深入理解搜索引擎的工作原理和实际应用。在这个课程项目中,学习者将经历从问题定义、系统设计到实施的全过程,提升自己的研究能力...
《深度学习搜索引擎开发:Java实现》是一本专著,它探讨了如何利用深度学习技术构建高效、智能的搜索引擎。本书的源代码包含了作者为阐述理论和技术而编写的Java程序,这些程序是理解并实践深度学习搜索引擎开发的...
4. **人工智能的应用**:人工智能技术如机器学习和深度学习正被广泛应用于搜索引擎优化之中,以提升搜索结果的质量和相关性。 5. **语音搜索**:随着智能音箱和其他语音助手的流行,支持语音输入的搜索引擎变得...
【搜索引擎源代码中国搜搜索引擎】 搜索引擎是互联网上用于查找信息的核心技术,其核心在于通过复杂的算法和数据处理,为用户提供最...通过深入学习和理解,我们可以更好地构建和优化中文搜索引擎,提升用户搜索体验。
【标题】"搜猫搜索引擎源码|仿百度搜索引擎源码"揭示了这是一份与搜索引擎相关的源代码,特别提到了“搜猫”品牌,并模仿了知名的百度搜索引擎的某些功能或设计。这个源码可能是用于学习、研究或者开发自己的搜索...
### 搜索引擎系统学习与开发总结 #### 一、搜索引擎概述 ...综上所述,搜索引擎的学习与开发不仅涉及到了解其工作原理,还需要深入掌握相关的技术细节,并结合实际应用场景进行不断的优化和完善。
搜索引擎的源码分析与学习能够帮助开发者理解搜索引擎的工作原理,提高网页抓取、数据处理和结果展示的技术水平。 【标签】:“百度”是中国最大的搜索引擎,以其强大的中文处理能力和丰富的网页数据库著称;...
这个源码是用于帮助程序员理解和学习如何创建一个基本的搜索引擎,或者作为基础进行二次开发。 ASP源码的核心组成部分通常包括以下几个方面: 1. **搜索接口**:这是用户与搜索引擎交互的部分,通常包含一个搜索框...
【搜索引擎的定义与重要性】 搜索引擎是一个专门设计用于在互联网上收集、整理和索引信息的网站,使得用户能够高效地查找所需的信息。...学习和掌握搜索引擎的使用技巧,有助于提高信息检索的效率和准确性。
【搜索引擎】是互联网技术中的重要组成部分,它通过爬虫技术遍历网页,提取相关信息,并进行关键词分析和索引存储。在这个系统中,搜索引擎可能采用了文本分析、自然语言处理和信息检索算法,以便更准确地理解和匹配...
"java搜索引擎大全.zip"这个压缩包包含了一系列与Java搜索引擎相关的资源,适合开发者进行学习和毕业设计。这里我们将深入探讨其中涉及的关键知识点,包括Java搜索引擎的原理、数据库的应用以及相关工具的使用。 1....
通用搜索引擎是互联网时代的核心工具,它们为用户提供便捷的信息获取途径,高效地处理海量的数据并返回相关的搜索结果。本文将深入探讨高效信息检索的原理、搜索引擎的类型及其工作机制。 1. 引言 随着互联网的飞速...
本项目提供了一套用Java和JSP(JavaServer Pages)编写的搜索引擎源代码,这对于学习和理解搜索引擎的工作原理,以及Java后端开发与Web交互有极大的帮助。下面我们将深入探讨相关知识点。 首先,Java是一种广泛使用...
这篇名为“搜索引擎相关论文”的文档,很可能深入探讨了搜索引擎的工作原理、优化策略以及对用户搜索行为的理解。 搜索引擎的主要组成部分包括爬虫、索引、查询处理和排名。首先,爬虫是搜索引擎获取网页信息的先驱...
网博垂直搜索引擎学习版是一款专为研究和学习设计的搜索引擎工具,主要针对特定领域或行业的信息进行深度检索。垂直搜索引擎与通用搜索引擎不同,它专注于某一类主题,如科技、医疗、法律等,提供更为精确和专业的...
【西南交大互联网搜索引擎课设】是一门针对计算机科学与技术专业的学生设计的课程实践项目,旨在让学生深入了解和掌握搜索引擎的工作原理与实现技术。在这个项目中,学生将有机会亲自构建一个简单的搜索引擎,从而...