Lucene及ikanalyzer.docVIP

  • 0
  • 0
  • 约1.67千字
  • 约 5页
  • 2017-07-05 发布于湖北
  • 举报
一,名词解释 1,Lucene:全文检索引擎架构(查询引擎和搜索引擎)以下的论述引用的是Lucene2.X的jar包 全文检索:先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search) 3,Lucene的使用分为两块,一块是建立索引库,一块上搜索 Lucene在扩展索引的时候不断创建新的索引文件,然后顶起的把这些新的小索引文件合并到原先的大索引中(不引响检索效率的前提下,提高了索引效率)需要索引的字段索引字段是可控的(既可以控制哪些字段需要索引,哪些字不需要索引。) Lucene信息检索的过程: 构建文本库 在开发功能之前,构建一个文本数据库,用来保存所有用户可能检索的信息,在这些信息的基础上,确定索引中的文本类型。(文本类型是被系统所默认的一种类型,一旦确定,就不再更改。) 在知识库系统中:将所有的知识采用同样的格式存储到文本数据库中。 类似于建立目录。大型信息检索系统采用倒排的方式建立索引 进行搜索 过滤结果:将检索到的用户需要的信息以一定的规则,进行排序或过滤,返回给用户。(关系到用户的体验) 倒排是一种面向单词的索引机制。通常它由(关键字)和出现情况两部分组成。对于索引中的每个词(关键字),都跟随一个列表(位置表),用来记录单词在所有文档中出现的位置。 倒排的特点:在倒排索引中,关键字的数量并非随着文本内容的增长也线性增长。这是因为无论多大数量的文本数据库,总能够规范出一个关键字表。这种关键字受到实际语言因素的限制,他的增长率在文本数据库达到一定规模后可以忽略不计。 lucene 中有两种过滤器,一个是搜索时的过滤器,一个是分析的过滤. Lucene与hibernate hibernate是程序与数据库的桥梁。当然没有这这座桥,走别的路,一样也可以访问数据库。 同样Lucene是程序与索引库的桥梁。通过操作Lucene的API,可以建立一个索引库。 索引库可以存在文本文件、内存、数据库里。 hibernate可以使用类映射文件创建数据表,类名对应数据库名,类属性对应数据表的相应字段。同样要想把一个对象存到索引库中, 先将对应的属性转化成Field,然后将这个Field add到一个document中,同时这个索引会对应一个内部编号,这个编号就代表这个对象,这样这个对象对应的document就创建完成了。 搜索: 当你的程序添加了hibernate框架,配置好之后就可以使用hibernate的HQL语言来操作数据库了。同样的,可以调用Lucene的API来操作索引库 以查询为例: hibernate中 from 类名 …… Lucene: 1,把要查询的东西解析成query对象 2,进行查询(利用搜索器,在索引库里面按照一定条件搜索生成的query对象,返回TopDocs查询结果的集合类)IndexSearcher 3,输出结果 使用:like %net% 会把netherlands也匹配出来, 多个关键词的模糊匹配:使用like %com%net%:就不能匹配词序颠倒的从字符串到文件的映射是文件到字符串映射的反向过程,于是保存这种信息的索引称为反向索引 经过分词(Tokenizer) 后得到的结果称为词元(Token(Vector Space Model) 。判断词(Term) 之间的关系从而得到文档相关性 Lucene 首次索引检索后,只将所有结果中匹配度最高的头100条结果 (TopDocs)的ID放到结果集缓存中并返回,如果首批缓存结果数用完后还要读取更 后面的结果时Searcher会再次检索并生成一个上次的搜索缓存数大1倍的缓存,并再重新向后抓取。所以如果构造一个Searcher去查1-120条 结果,Searcher其实是进行了2次搜索过程:头100条取完后,缓存结果用完,Searcher重新检索再构造一个200条的结果缓存,依此类推, 400条缓存,800条缓存。Lucene在收集结果的过程中将匹配度低的结果自动过滤掉了。

文档评论(0)

1亿VIP精品文档

相关文档