• QueryParser


    【概述】

    其他工具类使用比较方便,但不够灵活.QueryParser也实现了较多的匹配方式。

    【QueryParser的应用】

     1     /**
     2      * 使用QueryParser进行查询
     3      * @throws ParseException
     4      */
     5     @Test
     6     public void testQueryParser() throws ParseException{
     7         //4、创建Query
     8         //参数1:版本
     9         //参数2:默认搜索域(默认的搜索属性)
    10         //参数3:分词器
    11         QueryParser parser = new QueryParser(version,"content",new StandardAnalyzer(version));
    12         
    13         //获取Query对象
    14         //parse() 解析查询条件
    15         //1、精确匹配
    16         //在content中查询关键字为dual的条目
    17         Query query = parser.parse("dual");
    18 
    19         //查询到3条
    20         query = parser.parse("my");
    21         query = parser.parse("My");
    22         
    23         //2、分词匹配
    24         //parser通过空格对关键字进行分隔
    25         //空格相当于or
    26         //搜索到3条(wore || my)
    27         query = parser.parse("wore my");
    28         //搜多到1条(wore || mother)
    29         query = parser.parse("wore mother");
    30         
    31         //默认连接符可以通过setDefaultOperator()进行修改
    32         //parser.setDefaultOperator(Operator.AND);
    33         //搜索到1条(wore && my)
    34         query = parser.parse("wore my");
    35         query = parser.parse("my wore");
    36 
    37         //3、修改属性域
    38         //"属性域名称:值"
    39         query = parser.parse("author:Lucy");
    40         
    41         //4、通配符匹配
    42         //通配符在后
    43         query = parser.parse("author:L*");
    44         query = parser.parse("author:L???");
    45         
    46         //出现错误
    47         parser.setAllowLeadingWildcard(true);
    48         //因为Lucene认为通配符在前的查询方式效率较低。所以不建议使用
    49         query = parser.parse("author:*k");
    50         
    51         //5、区间查询
    52         //TO必须全部大写
    53         //开区间:不包含两个端点的值。如:(2,5)    2 < x < 5        
    54         //闭区间:包含两个端点的值。如:[2,5] 2<=x<=5
    55         //闭区间查询
    56         query = parser.parse("id:[1 TO 3]");
    57         //开区间(只查询到2)
    58         query = parser.parse("id:{1 TO 3}");
    59         query = parser.parse("author:[M TO Z]");
    60         //区间无法对数值类型进行查询
    61         query = parser.parse("size:[1 TO 1000]");
    62         //提示:无法使用半开闭区间
    63         //query = parser.parse("id:{1 TO 3]");
    64         
    65         //6、多条件查询
    66         //-:必须不包含(排除);+:必须包含
    67         //查询author不包含Mike 或content中包含my的所有条目
    68         query = parser.parse("- author:Mike + content:my");
    69         
    70         //7、and连接符
    71         query = parser.parse(""my and mother"");
    72         
    73         //8、短语查询
    74         //查询一个整句
    75         query = parser.parse(""my mother is health"");
    76         
    77         //9、距离查询
    78         //~2表示词语之间包含两个词语
    79         query= parser.parse(""my health"~2");
    80         
    81         //10、模糊匹配
    82         query = parser.parse("configer~");
    83         
    84         util.searchByQueryParser(path, 10, query);
    85         System.out.println("QueryParser查询结束");
    86     }
    每接触一个新领域,我就像一块掉进水里的海绵,四面八方的养分都让我不断充实。O(∩_∩)O~
  • 相关阅读:
    内存溢出
    Spring-bean的循环依赖以及解决方式
    JUC中Lock和ReentrantLock介绍及源码解析
    RocketMQ阅读注意
    RocketMQ环境搭建
    HSF源码阅读
    最近找工作,有招JAVA开发的可以联系我,如果不嫌弃我2年前用C,也可以联系我
    Spring Extensible XML
    MySQL主主+Keepalived架构安装部署
    记录一则数据库死锁故障的分析过程
  • 原文地址:https://www.cnblogs.com/zhzcode/p/9832074.html
Copyright © 2020-2023  润新知