上一篇中,简单介绍了lucene的搜索,在最后也谈到了搜索条件的问题,有诸多的Query,来进行不同条件的搜索,本篇中就对其他的几个Query进行简单的说明。其实,这些Query不需要死记硬背,只要了解了什么时候该用哪个,到用的时候详细查下便可(个人观点)。
TermQuery、TermRangeQuery、NumericRangeQuery、PrefixQuery、WildcardQuery、BooleanQuery、PhraseQuery、FuzzyQuery
这些不同的Query,只是在进行搜索时,第4步不同,在此就只进行第4步的截图,不再进行整体代码展示了。
1、TermQuery
介绍:进行基本的条件搜索,查询在指定的Field中是否存在输入的字
API:
代码展示:
搜索fileContent中为java的文件
2、TermRangeQuery
介绍:在某个范围内进行搜索,不能对数字和日期进行范围搜索
API:
代码展示:
1、搜索fileContent中以hello开头,以world结尾的部分-->能搜索出结果
2、搜索fileContent中以world开头,以hello结尾的部分-->无搜索结果
txt文件内容:
从文件中可以看出,确实hello在world之前,所以只能第1个搜索有结果
3、NumericRangeQuery
介绍:进行范围搜索,可对日期和数字进行搜索,可搜索double、float、int、long类型
API:
代码展示:
搜索numField中1到5的范围,精确度为1
注意:本来建索引时,没加入数字的Field,我又重新建立的索引,部分代码如下:
4、PrefixQuery
介绍:进行前缀搜索
API:
代码展示:
搜索fileContent中以ja开头的文件
5、WildcardQuery
介绍:通配符匹配搜索
API:
代码展示:
搜索fileContent中,以j开头,后面有四个字母的文件
注意:
lucene的API中,这样介绍了WildcarQuery,所以,我们在写程序的时候,搜索的条件最好不要以*或?开头
6、BooleanQuery
介绍:这是一个进行组合的Query搜索对象,可以把不同条件搜索的Query对象进行组合,并通过“与”、“或”和“非”的设置来达成一定的复合查询
API:
代码展示:
搜索fileContent中,必须有hadoop;
必须没有java;
可以有hive
注意:BooleanQuery可以组合的query很多,此处,我只使用了TermQuery。要达到复杂的查询,还是得依靠BooeanQuery,所以,这个BooleanQuery还是很重要的。
7、PhraseQuery
介绍:短语查询,用多个关键字,这几个关键字可能是紧密在一块的,也有可能是中间隔了几个其他关键字,可以通过设置几个关键字间的slop,所谓的slop是指两个项的位置间允许的最大间隔。
API:
代码展示:
文件内容:
8、FuzzyQuery
介绍:模糊查询,查询与给定关键字很相似的记录。
API:
这个类有4个构造函数,分别有1、2、3、4个参数,我采用了有3个参数的构造方法。
代码展示:
注意:
构造函数中的第二个参数,是设置的关键字的相似度,lucene内部才用了自己的算法来匹配;第三个参数是设置要有几个前缀字母完全匹配。
我的天啊,好几个搜索的Query,终于写完了,如果以上的内容有错,请指正。吃饭去先。