Lucene
基本概念
Lucene在对信息索引时,有一些基本的抽象概念。
- Document是搜索的基本单元,相当于关系型数据库的一行。
- Field是document的组成部分,相当于关系型数据库的列。
- Query是基本的查询,包括指定的field和需要查询的词
在一次普通的查询中,query是针对某个field的查询,查询结果包括包含这个field同时满足查询词要求的document。
查询类型
项查询
TermQuery是最基本的查询,构造时需要提供查询的field和查询词。
Term t = new Term("title","java");
Query query = new TermQuery(t);
范围查询
TermRangeQuery和NumericRangeQuery表示范围查询,前者主要是基于英文字母的field,后者主要是基于数字类型的field。
字符串查询
PrefixQuery 字符串前缀搜索
Term t = new Term("category","/technology/computers/programming");
PrefixQuery query = new PrefixQuery(t);
组合查询
BooleanQuery,布尔查询可以将基本的查询通过布尔关系:与、或和非,组合起来进行查询,而且布尔查询支持嵌套。
短语查询
PhraseQuery, 按照短语进行查询,可以设置短语的“距离”,用slop表示,默认为0
PhraseQuery query = new PhraseQuery();
query.setSlop(0);
query.add(new Term("field", "word"))
...
通配符查询
WildcardQuery,支持*和?两种通配符。
模糊搜索
FuzzyQuery基于编辑距离计算term的相似性,主要应用在英文。
匹配所有文档
MatchAllDocsQuery