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     }

 

posted @ 2018-10-22 19:15  猩生柯北  阅读(2318)  评论(0编辑  收藏  举报