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~