- public void queryParse(Query query , int num ){
- try {
- TopDocs tds = this.searcher.search(query, num);
- System.out.println("查询到的结果数:"+tds.totalHits);
- for(ScoreDoc sd : tds.scoreDocs){
- doc = this.searcher.doc(sd.doc);
- System.out.println("id:"+doc.get("id")+"---"+"name:"+doc.get("name")+"---"+"attachs:"+doc.get("attach")+"---"+"email:"+doc.get("email"));
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } finally {
- try {
- this.searcher.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- @Test
- public void testQueryParse() throws Exception{
- //创建QueryParser对象 默认的搜索域为content
- QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
- //设置 空格的默认操作符为 AND 默认为OR
- // parser.setDefaultOperator(Operator.AND);
- //开启第一个字符的通配符配置
- parser.setAllowLeadingWildcard(true);
- //搜索content中包含like的
- Query query = parser.parse("like");
- //既有like又有football的
- query = parser.parse("like foot ball");
- //域name为5555的
- query = parser.parse("name:5555");
- //在查询中加入通配符配置
- query = parser.parse("name:5*");
- //通配符默认不能放在首位
- query = parser.parse("name:*6");
- //查询content中包含kenan的 从中减去name为333的 加上id为6的
- query = parser.parse("kenan -name:333 +id:6");
- //字符串id从1到3 匹配一个区间 包含两边
- query = parser.parse("id:[1 TO 3]");
- //字符串id从1到3 匹配一个区间 不包含两边
- query = parser.parse("id:{1 TO 3}");
- //匹配 content包含foot ball这个字符串的
- query = parser.parse("\"foot ball\"");
- //like 和ball之间的距离小于等于2的 距离是他们之间的单词个数
- query = parser.parse("\"like ball\"~2");
- //模糊查询
- query = parser.parse("kenak~");
- su.queryParse(query, 10);
- }
本文出自 “Kenan_ITBlog” 博客,请务必保留此出处http://soukenan.blog.51cto.com/5130995/1122358