Lucene
|
传统 表
|
说明
|
IndexWriter
|
table
|
|
Document
|
一条记录
|
|
Field
|
每个字段
|
分为可被索引的,可切分的,不可被切分的,不可被索引 的几种组合类型
|
Hits
|
RecoreSet
|
结果集
|
|
属性
|
默认值
|
说明
|
mergeFactor
|
org.apache.lucene.mergeFactor
|
10
|
控制
index
的大小和频率
,
两个作用
1.
一个段有多少
document
2.
多少个段合成一个大段
|
maxMergeDocs
|
org.apache.lucene.maxMergeDocs
|
Integer.MAX_VALUE
|
限制一个段中的
document
数目
|
minMergeDocs
|
org.apache.lucene.minMergeDocs
|
10
|
缓存在内存中的
document
数目,超过他以后会写入到磁盘
|
maxFieldLength
|
|
1000
|
一个
Field
中最大
Term
数目,超过部分忽略,不会
index
到
field
中,所以自然 也就搜索不到
|
查询方式
|
说明
|
TermQuery
|
条件查询
例如:
TermQuery tquery=new TermQuery(new Term("name","jerry"));
name:
字段名
jerry:
要搜索的字符串
|
MultiTermQuery
|
多个字段进行同一关键字的查询
Query query= null;
Query =MultiFieldQueryParser.parse("
我
",new String[] {"title","content"},analyzer);
Searcher searcher=new IndexSearcher(indexFilePath); Hits hits=searcher.search(query); |
BooleanQuery
|
例如:
BooleanQuery bquery=new BooleanQuery(); bquery.add(query,true,false); bquery.add(mquery,true,false); bquery.add(tquery,true,false); Searcher searcher=new IndexSearcher(indexFilePath); Hits hits=searcher.search(bquery); |
WildcardQuery
|
语义查询(通配符查询)
例:
Query query= new WildcardQuery(new Term("sender","*davy*"));
|
PhraseQuery
|
短语查询
|
PrefixQuery
|
前缀查询
|
PhrasePrefixQuery
|
短语前缀查询
|
FuzzyQuery
|
模糊查询
|
RangeQuery
|
范围查询
|
SpanQuery
|
范围查询
|
类型
|
Analyzed
|
Indexed
|
Stored
|
说明
|
Field.Keyword(String,String/Date)
|
N
|
Y
|
Y
|
这个
Field
用来储存会直 接用来检索的比如
(
编号
,
姓名
,
日期等
)
|
Field.UnIndexed(String,String)
|
N
|
N
|
Y
|
不会用来检索的信息
,
但是检索后需要显示的
,
比如
,
硬件序列号
,
文档的
url
地址
|
Field.UnStored(String,String)
|
Y
|
Y
|
N
|
大段文本内容
,
会用 来检索
,
但是检索后不需要从
index
中取内容
,
可以 根据
url
去
load
真实的内容
|
Field.Text(String,String)
|
Y
|
Y
|
Y
|
检索
,
获取都需要的内容
,
直接放
index
中
,
不过这样会增大
index
|
Field.Text(String,Reader)
|
Y
|
Y
|
N
|
如果是一个
Reader, lucene
猜测内容比较多
,
会采用
Unstored
的策略
.
|
注:本文有些知识是1.4下的,如果你用的是2.0可能这些例子不能很好的运行。不过我觉得看了以上的东西,再结合一些例子就能对lucene有一 定的理解了,最起码可以开始干活了。在2.0版本中创建索引和进行多种搜索的例子我会陆继写出来与大家一起学习。