您的位置:首页 > 其它

Lucene入门之构建多种搜索请求

2009-08-08 23:54 357 查看

词条搜索

TermQuery

Term t=new Term(

被搜索的
Field,

搜索关键词
);

TermQuery q=new TermQuery(t);

组合搜索

组合搜索可以满足搜索词之间一些逻辑关系。

BooleanQuery.

BooleanQuery

的构建方法是,首先常见多个
TermQuery,

然后以多个
TermQuery

为参数构建
BooleanQuery,

在多个
Term

之间要进行逻辑运算。

例如:

Term t1=new Term(“text”,”love”);

TermQuery query1=new TermQuery(t1);

Term t1=new Term(“text”,”you”);

TermQuery query2=new TermQuery(t1);

BooleanQuery q=new BooleanQuery();

q.add(query1,

BooleanClause.Occur.MUST

);

q.add(query2,BooleanClause.Occur.MUST);

这个请求可以要求结果种出现
love you.

BooleanClause.Occur.MUST:

必须满足

BooleanClause.Occur.MUST_NOT:

必须不满足

BooleanClause.Occur.SHOULD:

搜索结果可以满足。

利用这三种逻辑可以构造出一些组合逻辑。

例如:让搜索结果同时满足多个条件,全
MUST



让搜索结果满足一些条件,同时不满足另外一些条件,可以用
MUST


MUST_NOT

的组合。

只包含排斥的条件,全用
MUST_NOT



含有某个关键字后者其他的关键字。可以用
SHOULD



BooleanQuery

对象所支持的子查询数量默认的情况下最多是
1024

个。可以通过
setMaxClauseCount(int num)

方法修改这个值。当然,子查询数量越少,查询的速度会越快。

范围搜索

让搜索的结果处于某个搜索的范围内。

RangeQuery



RangeQuery(Term lowerTerm,Term upperTerm,Boolean inclusive);

第一个参数是起始的
Term,

第二个参数是终止的
Term,

第三个参数表示是否包含边界。

包含边界值得搜索:

Term tb=new Term(“id”,”0”);

Term te=new Term(“id”,”2”);

RangeQuery q=new RangeQuery(tb,te,true);

不包含边界的搜索:

RangeQuery q=new RangeQuery(tb,te,false);

前缀搜索

只要求某一些搜索要求,满足某些前缀。这种情况,就要用前缀搜索来处理。

PrefixQuery(Term prefix)

要建立
PrefixQuery

对象,只需指定一个
Term

为其前缀即可以。

短语搜索

将短语组合起来,形成新的短语。例如将





,“件
”,

组合起来,可以形成“软件”。并且可以设置匹配度。

设置不同的间隔量,可以得到不同的短语,如



*




构建短语搜索的方法,就是先建立几个
Term,

然后按顺添加到
PharseQuery

对象中,如下所示:

Term t1=new Term(“text”,”


”);

Term t2=new Term(“text”,”


”);

PhraseQuery q=new PharseQuery();

q.add(t1);

q.add(t2);

使用
setSlop(int s)

可以设定短语允许的间隔字符数量。

设置为
1,

那么


软硬件


也符合要求。

多短语搜索

MultiPharseQuery

类,可以先指定一个前缀,然后把其他词语加在它的后面,从而组成词语。

例如指定“飞“作为统一前缀,然后指定“机”,“鸟”作为后缀,
Lucene

会组成


飞鸟





飞机


两个词进行搜索。

Term t1=new Term(“text”,”


”);

Term t2=new Term(“text”,”


”);

Term t3=new Term(“text”,”


”);

MultiPhraseQuery q=new MultiPhraseQuery();

添加统一前缀

q.add(t1);

添加后缀

q.add(new Term[]{t2,t3});

模糊搜索

FuzzyQuery

类,用于英文搜索。根据设定的匹配度,判断词形的相似度,从而得出相应的结果。

“good”


”god”

在某种情况下,看作模糊匹配。

Term t=new Term(“text”,”god”);

FuzzyQuery q=new FuzzyQuery(t,0.6f);

第二个参数指定模糊度,是一个
float

值,默认是
0.5,

这个值越小,搜索的模糊性就越强。搜索的模糊性越强,结果就越多,越不精确。

通配符搜索

可以用
”*”

表示任意多个字符,用
”?”

表示任意一个字符。

WildcardQuery

来实现通配符搜索。

Term t=new Term(“text”,”


*”);

WildcardQuery q=new WildcardQuery(t);

可以匹配以





开始的词语。

正则表达式匹配搜索

支持正则表达式的搜索。是最有用的模糊搜索之一。

Term t=new Term(“text”,”

正则表达式
”);

RegexQuery q=new RegexQuery(t);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: