[img][/img]刚开始对lucene很好奇,于是自己就买本书来看看,学了2天大概上掌握了一点lucene的原理,在这里总结一下,以免时间长了忘记,并且可以给需要的人提供以下参考!
刚开始学习学习一门技术最重要的就是理解它的原理,还有它的API,只有大体上理解这些以后才能更好的学习它!
(1)lucene是一个全文搜索引擎,是apache的一个顶级项目,在国内应用也很广泛!
(2)lucene建立索引文件的简单原理和算法
(a) 比如有两个文本文件 1.txt 里面内容为 He lived in beijing另一个文件为2.txt 里面内容为
he is my friend
(b)lucene在建立索引文件之前 需要利用分词器对文件内容等进行分词 比如第一个文件的内容就被分为
[ he][live][beijing]
第二个文件被分为
[he ][is][my][friend]
(因为 in 通常无意义所以就过滤掉了, 同时 live 可以把包含lived lives的文章也给找出来 所以 就把 lived 分词为live ,同时小写的也可以把包含大写的文章找出来 所以就把大写的分词为小写的 比如 He 分词为 he)
这个时候每一个文本分词出来的文件放在一个内存中的lucene中的Document对象中,最好把多个内存中的Document
合并成一个segment上!
同时lucene是倒排序的索引,最好结构大概就是这样:
刚开始对lucene很好奇,于是自己就买本书来看看,学了2天大概上掌握了一点lucene的原理,在这里总结一下,以免时间长了忘记,并且可以给需要的人提供以下参考!
刚开始学习学习一门技术最重要的就是理解它的原理,还有它的API,只有大体上理解这些以后才能更好的学习它!
(1)lucene是一个全文搜索引擎,是apache的一个顶级项目,在国内应用也很广泛!
(2)lucene建立索引文件的简单原理和算法
(a) 比如有两个文本文件 1.txt 里面内容为 He lived in beijing另一个文件为2.txt 里面内容为
he is my friend
(b)lucene在建立索引文件之前 需要利用分词器对文件内容等进行分词 比如第一个文件的内容就被分为
[ he][live][beijing]
第二个文件被分为
[he ][is][my][friend]
(因为 in 通常无意义所以就过滤掉了, 同时 live 可以把包含lived lives的文章也给找出来 所以 就把 lived 分词为live ,同时小写的也可以把包含大写的文章找出来 所以就把大写的分词为小写的 比如 He 分词为 he)
这个时候每一个文本分词出来的文件放在一个内存中的lucene中的Document对象中,最好把多个内存中的Document
合并成一个segment上!
同时lucene是倒排序的索引,最好结构大概就是这样:
关键字
文章号
出现频率
出现位置
[img]
[img]http://dl.iteye.com/upload/attachment/296774/85792c00-ecc7-36bf-ac71-99e203438c9e.png[/img]
[/img]
(因为是lucene按照字母顺序就行排序的)
(2)Document可以简单理解为一个文本文件(但实际上不是啊)
(3)Field的理解 Field 可以理解为Map类型的 它就是一些属性的集合,比如 title ,body,time 等
具体可以看Field的类:
public final class Field extends AbstractField implements Fieldable, Serializable {
/** Specifies whether and how a field should be stored. */
public static final class Store extends Parameter implements Serializable {
private Store(String name) {
super(name);
}
public Field(String name, String value, Store store, Index index) {
this(name, value, store, index, TermVector.NO);
}
public Field(String name, String value, Store store, Index index, TermVector termVector) {
this(name, true, value, store, index, termVector);
}
有很多个构造函数我这里仅仅列两个
其中segmen里面包含Document,document里面包含Field,Field里面包含term !
刚开始学习学习一门技术最重要的就是理解它的原理,还有它的API,只有大体上理解这些以后才能更好的学习它!
(1)lucene是一个全文搜索引擎,是apache的一个顶级项目,在国内应用也很广泛!
(2)lucene建立索引文件的简单原理和算法
(a) 比如有两个文本文件 1.txt 里面内容为 He lived in beijing另一个文件为2.txt 里面内容为
he is my friend
(b)lucene在建立索引文件之前 需要利用分词器对文件内容等进行分词 比如第一个文件的内容就被分为
[ he][live][beijing]
第二个文件被分为
[he ][is][my][friend]
(因为 in 通常无意义所以就过滤掉了, 同时 live 可以把包含lived lives的文章也给找出来 所以 就把 lived 分词为live ,同时小写的也可以把包含大写的文章找出来 所以就把大写的分词为小写的 比如 He 分词为 he)
这个时候每一个文本分词出来的文件放在一个内存中的lucene中的Document对象中,最好把多个内存中的Document
合并成一个segment上!
同时lucene是倒排序的索引,最好结构大概就是这样:
刚开始对lucene很好奇,于是自己就买本书来看看,学了2天大概上掌握了一点lucene的原理,在这里总结一下,以免时间长了忘记,并且可以给需要的人提供以下参考!
刚开始学习学习一门技术最重要的就是理解它的原理,还有它的API,只有大体上理解这些以后才能更好的学习它!
(1)lucene是一个全文搜索引擎,是apache的一个顶级项目,在国内应用也很广泛!
(2)lucene建立索引文件的简单原理和算法
(a) 比如有两个文本文件 1.txt 里面内容为 He lived in beijing另一个文件为2.txt 里面内容为
he is my friend
(b)lucene在建立索引文件之前 需要利用分词器对文件内容等进行分词 比如第一个文件的内容就被分为
[ he][live][beijing]
第二个文件被分为
[he ][is][my][friend]
(因为 in 通常无意义所以就过滤掉了, 同时 live 可以把包含lived lives的文章也给找出来 所以 就把 lived 分词为live ,同时小写的也可以把包含大写的文章找出来 所以就把大写的分词为小写的 比如 He 分词为 he)
这个时候每一个文本分词出来的文件放在一个内存中的lucene中的Document对象中,最好把多个内存中的Document
合并成一个segment上!
同时lucene是倒排序的索引,最好结构大概就是这样:
关键字
文章号
出现频率
出现位置
[img]
[img]http://dl.iteye.com/upload/attachment/296774/85792c00-ecc7-36bf-ac71-99e203438c9e.png[/img]
[/img]
(因为是lucene按照字母顺序就行排序的)
(2)Document可以简单理解为一个文本文件(但实际上不是啊)
(3)Field的理解 Field 可以理解为Map类型的 它就是一些属性的集合,比如 title ,body,time 等
具体可以看Field的类:
public final class Field extends AbstractField implements Fieldable, Serializable {
/** Specifies whether and how a field should be stored. */
public static final class Store extends Parameter implements Serializable {
private Store(String name) {
super(name);
}
public Field(String name, String value, Store store, Index index) {
this(name, value, store, index, TermVector.NO);
}
public Field(String name, String value, Store store, Index index, TermVector termVector) {
this(name, true, value, store, index, termVector);
}
有很多个构造函数我这里仅仅列两个
其中segmen里面包含Document,document里面包含Field,Field里面包含term !