本文主要是介绍Lucene5学习之PrefixQuery使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
继续学习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,
或者加裙一起交流学习!
这篇关于Lucene5学习之PrefixQuery使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!