lucene查询语法

本文介绍了Lucene的查询方式,包括使用Query子类如MatchAllDocsQuery、NumericRangeQuery等进行查询,以及通过QueryParser利用查询语法进行复杂查询,如范围查询、组合条件查询,并详细解释了各种查询操作符的用法。
lucene查询语法

 

 


一、 使用Query子类去查询

1. MatchAllDocsQuery

[AppleScript] 纯文本查看 复制代码
?
1
2
3
//查询所有文档
Query query = new MatchAllDocsQuery();
// 相当于查询语法 :  **



2.NumericRangeQuery

[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
//数值范围查询
//参数1:要查询的域
//参数2:最小值 newLongRange 就是long类型
//参数3:最大值
//参数4:是否包含最小值
//参数5:是否包含最大值
Query query = NumericRangeQuery.newLongRange("size", 1000l, 10000l, false, true);
//相当于查询语法 :  [1000 TO 10000]
//不支持数字类型



3.BooleanQuery 组合查询

[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
//创建一个BooleanQuery对象
BooleanQuery query = new BooleanQuery();
//创建子查询
Query query1 = new TermQuery(new Term("name", "lucene"));
//文件名中包含mybatis关键字
Query query2 = new TermQuery(new Term("name", "apache"));
//添加到BooleanQuery对象中
query.add(query1, Occur.SHOULD);
query.add(query2, Occur.MUST_NOT);
//相当于查询语法: AND OR NOT
// name:lucene -name:apache
// name:lucene NOT name:apache



4. QueryParser

[AppleScript] 纯文本查看 复制代码
?
1
2
3
4
5
6
//指定默认搜索域, 制定分析器
QueryParser queryParser = new QueryParser("content", new IKAnalyzer());
//对Lucene是java开发的进行分析之后,在content域上进行搜索,分词结果满足其一即可
Query query = queryParser.parse("Lucene是java开发的");
//相当于查询语法  content:lucene content:content:java content:开发



5. MultiFieldQueryParser

[AppleScript] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
8
//制定多个默认搜索域
String[] fields ={"name", "content"};
MultiFieldQueryParser queryParser = new MultiFieldQueryParser(fields, new IKAnalyzer());
//在多个搜索域上进行分析结果的查询 ,满足其一即可
Query query = queryParser.parse("mybatis is a apache project");
//相当于查询语法 
//(name:mybatis content:mybatis) (name:apache content:apache) (name:project content:project)



6. WildcardQuery

[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
@Test
// sprin?   => 匹配一个字符  spring sprinj sprinl
// sprin*   => 匹配多个字符  springfdgfd sprinj sprinl
// 通配符可以任意的位置
public void testQuery() throws Exception {
  Query query = new WildcardQuery(new Term("name","sp*ng"));
  printResult(getIndexSearcher(), query);
}
//相当于查询语法
// name:sp*ng  name:sprin? name:spring* name:?pring



7. FuzzyQuery

[AppleScript] 纯文本查看 复制代码
?
1
2
3
4
5
6
//可以进行模糊匹配, 即使有个别字母错误,也可以查询出结果
//只有两次机会, 只允许修正两个字母的错误
Query query = new FuzzyQuery(new Term("name","lvcene"));
printResult(getIndexSearcher(), query);
// 相当于查询语法 : name:lvcene~2



二、 使用QueryParser使用查询语法去查询
1、基础的查询语法,关键词查询:

域名+“:”+搜索的关键字
例如:content:java

2、范围查询

域名+“:”+[最小值 TO 最大值]
例如:size:[1 TO 1000]
范围查询在lucene中不支持数值类型,支持字符串类型。在solr中支持数值类型。

3、组合条件查询

1)+条件1 +条件2:两个条件之间是并且的关系and
例如:+filename:apache +content:apache
2)+条件1 条件2:必须满足第一个条件,应该满足第二个条件
例如:+filename:apache content:apache
3)条件1 条件2:两个条件满足其一即可。
例如:filename:apache content:apache
4)-条件1 条件2:必须不满足条件1,要满足条件2
例如:-filename:apache content:apache

第二种写法:
条件1 AND 条件2
条件1 OR 条件2
条件1 NOT 条件2

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值