构建自己的搜索引擎之Lucene详解
2015-04-17 22:59
381 查看
Lucene中的基本概念:
索引(Index):文档的集合组成索引。和一般的数据库不一样,Lucene不支持定义主键,但Solr支持。
为了方便索引大量的文档,Lucene中的一个索引分成若干个子索引,叫做段(segment)。段中包含了一些可搜索的文档。
文档(Document):代表索引库中的一条记录。一个文档可以包含多个列(Field)。和一般的数据库不一样,一个文档的一个列可以有多个值。例如一篇文档既可以属于互联网类,又可以属于科技类。
列(Field):命名的词的集合。
词(Term) :由两个值定义——词语和这个词语所出现的列。
倒排索引是基于词(Term)的搜索。
要学习搜索引擎,就需要了解倒排索引(倒排索引的定义请自行谷歌百度),首先我们来讲一下倒排索引的原理:
文档1: When in Rome, do as the Romans do. 文档2: When do you come back from Rome?
停用词: in, as, the, from
Lucene的整体结构:
索引相关类:
一个Document代表索引库中的一条记录。一个Document可以包含多个列。例如一篇文章可以包含“标题”、“正文”、“修改时间”等field,创建这些列对象以后,可以通过Document的add方法增加这些列到Document实例。
一段有意义的文字通过Analyzer分割成一个个的词语后写入到索引库。
创建索引:
?
向索引增加文档:
一个索引和一个数据库表类似,但是数据库中是先定义表结构后使用。但Lucene在放数据的时候定义字段结构。
?
搜索:
?
查询语法:
加权 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):
?
最基本的词条查询-TermQuery:
一般用于查询不切分的字段或者基本词
?
布尔逻辑查询-BooleanQuery:
举例:同时查询标题列和内容列
?
布尔查询的实现原理:
RangeQuery-区间查找:
例如日期列time按区间查询的语法:
time:[2007-08-13T00:00:00Z TO 2008-08-13T00:00:00Z]
后台实现代码:
?
这是Lucene的用法和原理,构建自己的搜索引擎可以使用Lucene这个强大的工具包,将大大缩减开发周期,实现一个高性能的个人搜索引擎。
索引(Index):文档的集合组成索引。和一般的数据库不一样,Lucene不支持定义主键,但Solr支持。
为了方便索引大量的文档,Lucene中的一个索引分成若干个子索引,叫做段(segment)。段中包含了一些可搜索的文档。
文档(Document):代表索引库中的一条记录。一个文档可以包含多个列(Field)。和一般的数据库不一样,一个文档的一个列可以有多个值。例如一篇文档既可以属于互联网类,又可以属于科技类。
列(Field):命名的词的集合。
词(Term) :由两个值定义——词语和这个词语所出现的列。
倒排索引是基于词(Term)的搜索。
要学习搜索引擎,就需要了解倒排索引(倒排索引的定义请自行谷歌百度),首先我们来讲一下倒排索引的原理:
文档1: When in Rome, do as the Romans do. 文档2: When do you come back from Rome?
停用词: in, as, the, from
Lucene的整体结构:
索引相关类:
一个Document代表索引库中的一条记录。一个Document可以包含多个列。例如一篇文章可以包含“标题”、“正文”、“修改时间”等field,创建这些列对象以后,可以通过Document的add方法增加这些列到Document实例。
一段有意义的文字通过Analyzer分割成一个个的词语后写入到索引库。
创建索引:
?
一个索引和一个数据库表类似,但是数据库中是先定义表结构后使用。但Lucene在放数据的时候定义字段结构。
?
?
加权 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):
?
一般用于查询不切分的字段或者基本词
?
举例:同时查询标题列和内容列
?
RangeQuery-区间查找:
例如日期列time按区间查询的语法:
time:[2007-08-13T00:00:00Z TO 2008-08-13T00:00:00Z]
后台实现代码:
?
相关文章推荐
- 搜索引擎第七讲 Compass-Lucene版的构建索引时的参数详解
- 构建自己的搜索引擎(lucene,hadoop,nutch)
- 基于Heritrix+Lucene的搜索引擎构建
- 利用Xapian构建自己的搜索引擎:检索
- 使用Lucene2.3构建搜索引擎 推荐
- 利用Xapian构建自己的搜索引擎:Database
- windows构建网页版搜索引擎 Nutch+Lucene+Mysql+Tomcat(一)
- Lucene+nutch构建垂直搜索引擎
- 构建自己的博客专用搜索引擎--抓数据
- 利用Xapian构建自己的搜索引擎:Document、Term和Value
- 利用Xapian构建自己的搜索引擎:Document、Term和Value
- 借助 Lucene.Net 构建站内搜索引擎(上)
- 自己动手写搜索引擎(常搜吧项目展示)(Java、Lucene、hadoop)
- 自己动手写搜索引擎(常搜吧历程六#解析文档之PDF#)(Java、Lucene、hadoop)
- 构建自己的博客专用搜索引擎--抓数据
- 使用Lucene开发自己的搜索引擎--(1)倒排索引基础知识
- windows构建网页版搜索引擎 Nutch+Lucene+Mysql+Tomcat(二)
- 54 搜索引擎及Lucene基础、elasticsearch使用基础、ES使用详解、ES查询及Logstash入门
- 利用Lucene与Nutch构建简单的全文搜索引擎
- Ajax+Lucene构建搜索引擎