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

目录
相关文章
|
C# 容器
WPF技术之HorizontalAlignment和VerticalAlignment
HorizontalAlignment和VerticalAlignment是用来确定控件在其父容器中的水平和垂直位置的属性。
1129 0
WPF技术之HorizontalAlignment和VerticalAlignment
|
新零售 测试技术 持续交付
阿里如何定义团队的研发效能?
作者:何勉,阿里巴巴研发效能部资深技术专家 相关阅读:都996了,研发效能还是提不起来,关键在这里 因为身处研发效能部,我接触了公司很多产品技术团队。他们几乎都把研发效能提升列为了本财年的重要目标,大部分还为此成立专项。
18687 0
阿里如何定义团队的研发效能?
|
10月前
|
SQL Java
【JAVA进阶篇教学】第九篇:MyBatis-Plus用法介绍
【JAVA进阶篇教学】第九篇:MyBatis-Plus用法介绍
日常报错 - NO constructor found in matching [java.lang.String]解决方法
日常报错 - NO constructor found in matching [java.lang.String]解决方法
611 0
|
存储 自然语言处理 JavaScript
【ElasticSearch从入门到放弃系列 三】Lucene的基本概念和使用(上)
【ElasticSearch从入门到放弃系列 三】Lucene的基本概念和使用(上)
176 1
|
Dubbo Java 应用服务中间件
和外部系统如何对接?Spring Boot 项目调用外部接口的 3 种方式
和外部系统如何对接?Spring Boot 项目调用外部接口的 3 种方式
|
消息中间件 存储 缓存
【架构设计】酒店预订应用程序的系统设计架构(如 Airbnb、OYO)
【架构设计】酒店预订应用程序的系统设计架构(如 Airbnb、OYO)
|
存储 自然语言处理 Java
Luke:用于Lucene / Solr / Elasticsearch索引的GUI工具
Luke:用于Lucene / Solr / Elasticsearch索引的GUI工具
681 0
Luke:用于Lucene / Solr / Elasticsearch索引的GUI工具
|
运维 Cloud Native 数据可视化
2018-2021,60+篇阿里研发效能提升干货,都在这里了
今天,正值2021的最后1天,我们精心盘点了2018-2021连续3年来,云效团队在研发效能提升方面输出的所有干货,希望对大家有所帮助。
5088 3
2018-2021,60+篇阿里研发效能提升干货,都在这里了
|
存储 数据库
【Sa-Token】5、Sa-Token授权操作
Sa-Token 在用户登录之后,并不会马上授权,而是等到需要验证的时候,才会去授权,授权也非常简单,我们只需要实现 StpInterface 接口,重写 getRoleList、getPermissionList 两个方法就好了,与 shiro 一样,同样返回 role 的标识集合,和 permission 的标识集合就好了
550 0