您的位置:首页 > 产品设计 > UI/UE

7、学习lucene之其他搜索的条件Query

2012-07-29 14:04 211 查看
上一篇中,简单介绍了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,终于写完了,如果以上的内容有错,请指正。吃饭去先。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: