Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML/Json格式的返回结果。采用Java5开发,基于Lucene。
Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。
其中Lucene全文检索的基本原理,跟郭军大牛讲的web搜索课程里的技术一致,采用分词,语义语法分析,向量空间模型等技术来实现,下面转载一篇讲的比较细致的博文备忘:http://.cn/about.htm中文章《开放源代码的全文检索引擎Lucene》
1. 索引过程:
1) 有一系列被索引文件
2) 被索引文件经过语法分析和语言处理形成一系列词(Term)。
3) 经过索引创建形成词典和反向索引表。
4) 通过索引存储将索引写入硬盘。
2. 搜索过程:
a) 用户输入查询语句。
b) 对查询语句经过语法分析和语言分析得到一系列词(Term)。
c) 通过语法分析得到一个查询树。
d) 通过索引存储将索引读入到内存。
e) 利用查询树搜索索引,从而得到每个词(Term)的文档链表,对文档链表进行交,差,并得到结果文档。
f) 将搜索到的结果文档对查询的相关性进行排序。
g) 返回查询结果给用户。
2. 对字典按字母顺序进行排序。
Term
Document ID
allow
1
allow
1
allow
2
beer
1
drink
1
drink
2
find
2
friend
1
friend
2
go
1
go
2
his
2
jerry
2
my
2
school
2
see
2
student
1
student
2
their
1
them
2
3. 合并相同的词(Term)成为文档倒排(Posting List)链表。
在此表中,有几个定义: