Lucene全方检索框架入门篇

知道91 | 教程 | 2015-11-29 | 阅读:3504

今天给大家介绍的是关于分布式存储的一个工具,Lucene,在Java里面是非常常见的一个框架,在Csharp中,也有移植版的Lucene.Net,都这么火了,快来认识认识吧。

加密

1、什么时Lucene?

是一个全文搜索框架,而不是应用产品,他只是一种工具让你能实现某些产品,并不像www.baidu.com拿来就能用

是apache组织的一个用java实现的全文搜索引擎的开源项目

2、Luncen的工作方式?

提供的服务实际包含两部分:一入一出

入:写入,即将你提供的数据源写入索引

出:读出,向用户提供全文搜索服务,让用户可以通过关键词定位源

3、写入流程

数据源首先经过analyzer处理,包括:分词,分成一个个单词

将数据源中需要的信息加入Document的各个Field中,并把需要索引的字段按照分词的顺序索引起来,把需要存储的Field存储起来。

将索引写入存储器,存储器可以是内存或磁盘

4、读出流程

用户提供搜索关键词,经过analyzer处理。

对处理后的关键词搜索索引找出对应的Document。

用户根据需要从找到的Document中提取需要的Field。

5、Lucene专业术语

Lucene 其实很简单的,它最主要就是做两件事:建立索引和进行搜索

来看一些在lucene中使用的术语,这里并不打算作详细的介绍,只是点一下而已----因为这一个世界有一种好东西,叫搜索。

IndexWriter:lucene中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程中的一些参数使用。

Analyzer:分析器,主要用于分析搜索引擎遇到的各种文本。常用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。

Directory:索引存放的位置;lucene提供了两种索引存放的位置,一种是磁盘,一种是内存。一般情况将索引放在磁盘上;相应地lucene提供了FSDirectory和RAMDirectory两个类。

Document:文档;Document相当于一个要进行索引的单元,任何可以想要被索引的文件都必须转化为Document对象才能进行索引。

Field:字段。

IndexSearcher:是lucene中最基本的检索工具,所有的检索都会用到IndexSearcher工具;

Query:查询,lucene中支持模糊查询,语义查询,短语查询,组合查询等等,如有TermQuery,BooleanQuery,RangeQuery,WildcardQuery等一些类。

QueryParser: 是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象。

Hits:在搜索完成之后,需要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在lucene中,搜索的结果的集合是用Hits类的实例来表示的。

微软

6、Lucene注意事项

索引不能太大,要不然效率会很低,大于1G的时候必须考虑公布索引问题

不建议用多线程来建索引,产生的互锁问题很麻烦,经常发现索引被lock,无法重新建议的情况

中文分词是个大问题,目前免费的分词效果都很差。如果有能力还是自己实现一个分词模块,用最短路径的切分方法,网上有教材和demo源码,可以参考。

建增量索引的时候很耗cpu,在访问量大的时候会导致cpu的idle为0

默认的评分机制不太合理,需要根据自己的业务定制

整体来说lucene要用好不容易,必须在上述方面扩充他的功能,才能作为一个商用的搜索引擎。

国外优秀的ElasticSearch使用案例

GitHub

GitHub使用ElasticSearch搜索20TB的数据,包括13亿的文件和1300亿行代码

GitHub在2013年1月升级了他们的代码搜索,由solr转为ElasticSearch,目前集群规模为26个索引存储节点+8个客户端节点(负责处理搜索请求)

Mozilla

Mozilla公司以火狐著名,它目前使用WarOnOrange这个项目来进行单元或功能测试,测试结果以json方式索引到ElasticSearch中,开发人员可以非常方便的查找Bug

Sony

Sony公司使用ElasticSearch作为信息搜索引擎