Lucene入门之构建多种搜索请求
2009-08-08 23:54
357 查看
词条搜索
TermQueryTerm 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);
相关文章推荐
- lucene多种搜索方式详解例子
- 1.搜索引擎的历史,搜索引擎起步,发展,繁荣,搜索引擎的原理,搜索技术用途,信息检索过程,倒排索引,什么是Lucene,Lucene快速入门
- lucene多种搜索方式详解例子
- 【Lucene3.6.2入门系列】第06节_高级搜索之排序
- 【Lucene3.6.2入门系列】第14节_SolrJ操作索引和搜索文档以及整合中文分词
- 【Lucene3.6.2入门系列】第12节_近实时搜索
- Lucene核心--构建Lucene搜索(下篇,理论篇)
- Lucene5.5.4入门以及基于Lucene实现博客搜索功能
- 使用Lucene+Paoding构建SSH2系统的站内搜索
- Lucene 3.6.2入门系列:高级搜索之自定义QueryParser
- 基于Heritrix+Lucene的搜索引擎构建(2)——索引与搜索框架Lucene
- lucene的多种搜索2-SpanQuery
- Lucene实现多种高级搜索形式
- Lucene构建网站搜索系统
- [Android入门]从零构建Android app之天气——5.设计网络请求底层架构
- Lucene 6.2.1入门教程(一) 创建索引和基本搜索索引
- Android入门——构建UI布局的多种方式
- 【Lucene3.6.2入门系列】第07节_高级搜索之普通Filter和自定义Filter
- HDU 1016 Prime Ring Problem(搜索入门题 DFS,多种方式)
- 【Lucene3.6.2入门系列】第08节_高级搜索之自定义评分