lucene搜索方式(query类型)
2012-07-12 10:16
330 查看
Lucene有多种搜索方式,可以根据需要选择不同的方式。
1、词条搜索(单个关键字查找)
主要对象是TermQuery
调用方式如下:
Term term=new Term(字段名,搜索关键字);
Query query=new TermQuery(term);
Hits hits=searcher.search(query);
2、组合搜索(允许多个关键字组合搜索)
主要对象是BooleanQuery
调用方式如下:
Term term1=new Term(字段名,搜索关键字);
TermQuery query1=new TermQuery(term1);
Term term2=new Term(字段名,搜索关键字);
TermQuery query2=new TermQuery(term2);
BooleanQuery booleanquery=new BooleanQuery();
booleanquery.add(query1,参数)
booleanquery.add(query2,参数)
Hits hits=searcher.search(booleanquery);
此方法中的核心在BooleanQuery的add方法上,其第二个参数有三个可选值,对应着逻辑上的与或非关系
参数如下:
BooleanClause.Occur.MUST 必须包含,类似于逻辑运算的与
BooleanClause.Occur.MUST _NOT 必须不包含,类似于逻辑运算的非
BooleanClause.Occur.SHOULD 可以包含,类似于逻辑运算的或
这三者组合,妙用无穷。
3、范围搜索(允许搜索指定范围内的关键字结果)
主要对象是RangeQuery
调用方式如下:
Term term1=new Term(字段名,起始值);
Term term2=new Term(字段名,终止值);
RangeQuery rangequery=new RangeQuery(term1,term2,参数);
Hits hits=searcher.search(rangequery);
此方法中的参数是Boolean类型的,表示是否包含边界 。
true 包含边界
false不包含边界
4、前缀搜索(搜索起始位置符合要求的结果)
主要对象是PrefixQuery
调用方式如下:
Term term=new Term(字段名,搜索关键字);
PrefixQuery prefixquery=new PrefixQuery (term);
Hits hits=searcher.search(prefixquery);
5、短语搜索(根据零碎的短语组合成新的词组进行搜索)
主要对象是PhraseQuery
调用方式如下:
Term term1=new Term(字段名,搜索关键字);
Term term2=new Term(字段名,搜索关键字);
PhraseQuery phrasequery=new PhraseQuery();
phrasequery.setSlop(参数);
phrasequery.add(term1);
phrasequery.add(term2);
Hits hits=searcher.search(phrasequery);
其中setSlop的参数是设置两个关键字之间允许间隔的最大值。
6、多短语搜索(先指定一个前缀关键字,然后讲其他的关键字加在此关键字之后,组成词语进行搜索)
主要对象是:MultiPhraseQuery
调用方式如下:
Term term=new Term(字段名,前置关键字);
Term term1=new Term(字段名,搜索关键字);
Term term2=new Term(字段名,搜索关键字);
MultiPhraseQuery multiphrasequery=new MultiPhraseQuery();
multiphrasequery.add(term);
multiphrasequery.add(new Term[]{term1,term2});
Hits hits=searcher.search(multiphrasequery);
7、模糊搜索(顾名思义)
主要对象是:FuzzyQuery
调用方式如下:
Term term=new Term(字段名,搜索关键字);
FuzzyQuery fuzzyquery=new FuzzyQuery (term,参数);
Hits hits=searcher.search(fuzzyquery);
此中的参数是表示模糊度,是小于1的浮点小数,比如0.5f
8、通配符搜索(顾名思义)
主要对象是:WildcardQuery
调用方式如下:
Term term=new Term(字段名,搜索关键字+通配符);
WildcardQuery wildcardquery=new WildcardQuery (term);
Hits hits=searcher.search(wildcardquery);
其中的通配符分两种,即*和?
* 表示任意多的自负
?表示任意一个字符
9、正则表达式搜索(顾名思义)
主要对象是:RegexQuery
调用方式如下:
Lucene 搜索种类很多。这里就介绍几个最常用的。其中TermQuery\BooleanQuery\RegexQuery功能最强大,最为常用。
1、词条搜索(单个关键字查找)
主要对象是TermQuery
调用方式如下:
Term term=new Term(字段名,搜索关键字);
Query query=new TermQuery(term);
Hits hits=searcher.search(query);
2、组合搜索(允许多个关键字组合搜索)
主要对象是BooleanQuery
调用方式如下:
Term term1=new Term(字段名,搜索关键字);
TermQuery query1=new TermQuery(term1);
Term term2=new Term(字段名,搜索关键字);
TermQuery query2=new TermQuery(term2);
BooleanQuery booleanquery=new BooleanQuery();
booleanquery.add(query1,参数)
booleanquery.add(query2,参数)
Hits hits=searcher.search(booleanquery);
此方法中的核心在BooleanQuery的add方法上,其第二个参数有三个可选值,对应着逻辑上的与或非关系
参数如下:
BooleanClause.Occur.MUST 必须包含,类似于逻辑运算的与
BooleanClause.Occur.MUST _NOT 必须不包含,类似于逻辑运算的非
BooleanClause.Occur.SHOULD 可以包含,类似于逻辑运算的或
这三者组合,妙用无穷。
3、范围搜索(允许搜索指定范围内的关键字结果)
主要对象是RangeQuery
调用方式如下:
Term term1=new Term(字段名,起始值);
Term term2=new Term(字段名,终止值);
RangeQuery rangequery=new RangeQuery(term1,term2,参数);
Hits hits=searcher.search(rangequery);
此方法中的参数是Boolean类型的,表示是否包含边界 。
true 包含边界
false不包含边界
4、前缀搜索(搜索起始位置符合要求的结果)
主要对象是PrefixQuery
调用方式如下:
Term term=new Term(字段名,搜索关键字);
PrefixQuery prefixquery=new PrefixQuery (term);
Hits hits=searcher.search(prefixquery);
5、短语搜索(根据零碎的短语组合成新的词组进行搜索)
主要对象是PhraseQuery
调用方式如下:
Term term1=new Term(字段名,搜索关键字);
Term term2=new Term(字段名,搜索关键字);
PhraseQuery phrasequery=new PhraseQuery();
phrasequery.setSlop(参数);
phrasequery.add(term1);
phrasequery.add(term2);
Hits hits=searcher.search(phrasequery);
其中setSlop的参数是设置两个关键字之间允许间隔的最大值。
6、多短语搜索(先指定一个前缀关键字,然后讲其他的关键字加在此关键字之后,组成词语进行搜索)
主要对象是:MultiPhraseQuery
调用方式如下:
Term term=new Term(字段名,前置关键字);
Term term1=new Term(字段名,搜索关键字);
Term term2=new Term(字段名,搜索关键字);
MultiPhraseQuery multiphrasequery=new MultiPhraseQuery();
multiphrasequery.add(term);
multiphrasequery.add(new Term[]{term1,term2});
Hits hits=searcher.search(multiphrasequery);
7、模糊搜索(顾名思义)
主要对象是:FuzzyQuery
调用方式如下:
Term term=new Term(字段名,搜索关键字);
FuzzyQuery fuzzyquery=new FuzzyQuery (term,参数);
Hits hits=searcher.search(fuzzyquery);
此中的参数是表示模糊度,是小于1的浮点小数,比如0.5f
8、通配符搜索(顾名思义)
主要对象是:WildcardQuery
调用方式如下:
Term term=new Term(字段名,搜索关键字+通配符);
WildcardQuery wildcardquery=new WildcardQuery (term);
Hits hits=searcher.search(wildcardquery);
其中的通配符分两种,即*和?
* 表示任意多的自负
?表示任意一个字符
9、正则表达式搜索(顾名思义)
主要对象是:RegexQuery
调用方式如下:
Lucene 搜索种类很多。这里就介绍几个最常用的。其中TermQuery\BooleanQuery\RegexQuery功能最强大,最为常用。
相关文章推荐
- lucene搜索方式(query类型)
- lucene搜索方式(query类型)
- lucene搜索方式(query类型)
- lucene搜索方式(query类型)
- lucene-查询query->WildcardQuery使用通配符搜索
- Lucene全文搜索查询string时间类型
- Lucene的数字范围搜索 (Numeric Range Query)原理
- Lucene搜索方式大合集
- Lucene搜索方式大合集
- Lucene搜索方式大合集
- lucene.net 的查询方式query条件判断
- lucene 搜索的几种方式(转)
- lucene多种搜索方式详解例子
- 如何在Lucene里面进行数字范围搜索 (Numeric Range Query)
- lucene几种搜索方式
- lucene搜索方式+过滤
- Lucene搜索方式大合集
- (转)lucene.net 的查询方式query,条件判断
- lucene多种搜索方式详解例子
- Lucene入门项目实例---比较Lucene方式搜索与传统String方式搜索的效率