继续学习Query系列的实现类,PrefixQuery即前缀查询,类似于数据库SQL里的like 'Java%',查询以指定前缀字符串打头的索引文档。官方API是这样解释的:
意思是这个Query是用包含指定前缀的Terms来匹配索引文档的,PrefixQuery是QueryParser根据用户的输入构建的。
这个Query很简单,没什么多说的,直接上使用示例:
- String fieldName = "contents";
- String queryString = "lucene";
- Query query = new PrefixQuery(new Term(fieldName,queryString));
注意,使用PrefixQuery时,你的输入不需要加*星号的,即queryString=lucene即可,而不用多此一举写成
queryString=lucene*,但如果你是使用QueryParser来构建前缀查询,则需要添加星号的,如:
- QueryParser parser = new QueryParser(fieldName, new AnsjAnalyzer());
- Query query = parser.parse("lucene*");
这个是容易犯错的地方,特此提醒。
还有需要注意的是,你提供的查询参数queryString必须全部是小写的,不能包含大写形式,因为Lucene内部的Term都是经过小写处理过的,没有大写形式的,你如果这样写:
- //参数定义
- String directoryPath = "D:/lucenedir";
- String fieldName = "contents";
- String queryString = "Lucene"; //Lucene中L大写了,是搜不到结果的
- Query query = new PrefixQuery(new Term(fieldName,queryString));
而你如果使用QueryParser来构建前缀查询则不用担心这个大小写问题,因为QueryParser会经过分词器,分词器会进行大小写处理,前面的几篇博文也提到过。
最后提醒一点就是前缀查询性能不太好,尽量提供的查询关键字长度大点,不要使用什么a*这种方式来查询,更不用说**这种方式了。注意了上面几点,PrefixQuery怎么使用就基本上掌握了。
如果你还有什么问题请加我Q-Q:7-3-6-0-3-1-3-0-5,
或者加裙
一起交流学习!
转载:http://iamyida.iteye.com/blog/2194955
时间: 2024-12-05 14:58:08