Lucene5学习之PrefixQuery使用

简介:

     继续学习Query系列的实现类,PrefixQuery即前缀查询,类似于数据库SQL里的like 'Java%',查询以指定前缀字符串打头的索引文档。官方API是这样解释的:



 意思是这个Query是用包含指定前缀的Terms来匹配索引文档的,PrefixQuery是QueryParser根据用户的输入构建的。

     这个Query很简单,没什么多说的,直接上使用示例: 

Java代码   收藏代码
  1. String fieldName = "contents";  
  2. String queryString = "lucene";  
  3.           
  4. Query query = new PrefixQuery(new Term(fieldName,queryString));  

    注意,使用PrefixQuery时,你的输入不需要加*星号的,即queryString=lucene即可,而不用多此一举写成

   queryString=lucene*,但如果你是使用QueryParser来构建前缀查询,则需要添加星号的,如:

Java代码   收藏代码
  1. QueryParser parser = new QueryParser(fieldName, new AnsjAnalyzer());  
  2. Query query = parser.parse("lucene*");  

    这个是容易犯错的地方,特此提醒。

    还有需要注意的是,你提供的查询参数queryString必须全部是小写的,不能包含大写形式,因为Lucene内部的Term都是经过小写处理过的,没有大写形式的,你如果这样写:

Java代码   收藏代码
  1. //参数定义  
  2. String directoryPath = "D:/lucenedir";  
  3. String fieldName = "contents";  
  4. String queryString = "Lucene"//Lucene中L大写了,是搜不到结果的  
  5.           
  6. 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

目录
相关文章
|
9月前
|
索引
lucene入门使用
lucene入门使用
49 2
|
存储 自然语言处理 算法
Lucene学习总结
Lucene学习总结
123 0
Lucene学习总结
|
关系型数据库 MySQL 数据库
为什么要使用 Lucene|学习笔记
快速学习为什么要使用 Lucene
168 0
为什么要使用 Lucene|学习笔记
|
分布式计算 算法 Hadoop
什么是 lucene|学习笔记
快速学习 什么是 lucene
103 0
什么是 lucene|学习笔记
|
索引
lucene学习笔记
lucene学习笔记
149 0
|
开发框架 Java Apache
Lucene|学习笔记
快速学习 Lucene
131 0
|
Java 索引 自然语言处理
|
分布式计算 自然语言处理 Hadoop