- 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