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

[size=large]词条搜索[/size]
TermQuery

Term t=new Term( 被搜索的 Field, 搜索关键词 );

TermQuery q=new TermQuery(t);

[size=large]组合搜索[/size]
组合搜索可以满足搜索词之间一些逻辑关系。

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) 方法修改这个值。当然,子查询数量越少,查询的速度会越快。

[size=large]范围搜索[/size]
让搜索的结果处于某个搜索的范围内。

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);

[size=large]前缀搜索[/size]
只要求某一些搜索要求,满足某些前缀。这种情况,就要用前缀搜索来处理。

PrefixQuery(Term prefix)

要建立 PrefixQuery 对象,只需指定一个 Term 为其前缀即可以。

[size=large]短语搜索[/size]
将短语组合起来,形成新的短语。例如将 ” 软 ” ,“件 ”, 组合起来,可以形成“软件”。并且可以设置匹配度。

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

构建短语搜索的方法,就是先建立几个 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, 那么 ” 软硬件 ” 也符合要求。

[size=large]多短语搜索[/size]
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});

[size=large]模糊搜索[/size]
FuzzyQuery 类,用于英文搜索。根据设定的匹配度,判断词形的相似度,从而得出相应的结果。

“good” 和 ”god” 在某种情况下,看作模糊匹配。

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

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

第二个参数指定模糊度,是一个 float 值,默认是 0.5, 这个值越小,搜索的模糊性就越强。搜索的模糊性越强,结果就越多,越不精确。

[size=large]通配符搜索[/size]
可以用 ”*” 表示任意多个字符,用 ”?” 表示任意一个字符。

WildcardQuery 来实现通配符搜索。

Term t=new Term(“text”,” 飞 *”);

WildcardQuery q=new WildcardQuery(t);

可以匹配以 ” 飞 ” 开始的词语。

[size=large]正则表达式匹配搜索[/size]
支持正则表达式的搜索。是最有用的模糊搜索之一。

Term t=new Term(“text”,” 正则表达式 ”);

RegexQuery q=new RegexQuery(t);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值