博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lucene5学习之PrefixQuery使用
阅读量:4027 次
发布时间:2019-05-24

本文共 1056 字,大约阅读时间需要 3 分钟。

     继续学习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://kdxbi.baihongyu.com/

你可能感兴趣的文章
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
STL::deque以及由其实现的queue和stack
查看>>
CS4344驱动
查看>>
WAV文件解析
查看>>
DAC输出音乐2-解决pu pu 声
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>
flutter-实现一个下拉刷新上拉加载的列表
查看>>
android 代码实现圆角
查看>>
postman调试webservice接口
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
Android DataBinding使用2-Recycleview
查看>>
drat中构造方法
查看>>