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

        上一篇中,简单介绍了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,终于写完了,如果以上的内容有错,请指正。吃饭去先。

                  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值