【概述】
其他工具类使用比较方便,但不够灵活.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 //空格相当于or26 //搜索到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<=555 //闭区间查询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 }