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

词条搜索

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值