|
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
|
范围查询
|
{"title","content"},analyzer);
{|
类型
|
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的策略.
|
{