多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > Lucene中內置常用Query對象

Lucene中內置常用Query對象

來源:程序員人生   發布時間:2014-12-18 08:50:34 閱讀次數:3822次

       以下這幾種lucene內置查詢對象,不過在實際的項目開發中,這類查詢方式利用的不多。1般用QueryParser去獲得查詢對象。由于QueryParser內部基本實現了所有的內置查詢對象。

      這是最多見的QueryParse的寫法

/** * 通過QueryParser去獲得查詢對象 * * @throws ParseException */ @Test public void searchByQueryParse() throws ParseException { // 1創建QueryParser對象,默許域為content,可以改變 QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35)); // 改變空格的默許操作符,以下可以改成AND parser.setDefaultOperator(Operator.AND); // 開啟第1個字符的通配查詢,默許是關閉的,太消耗性能 parser.setAllowLeadingWildcard(true); // 搜索包括content中包括like的 Query query = parser.parse("like"); // 查詢content中,basketball 和 basketball 的文檔 query = parser.parse("basketball football"); // 改變搜索域 query = parser.parse("name:make"); // 用*或? 通配符匹配 query = parser.parse("name:j*"); // 通配符默許不能放在首位 query = parser.parse("email:*@itat.org"); // 查詢 名字中沒mike,content中like的。 +和- 必須要放在前面 query = parser.parse("- name:mike + like"); // 匹配1個區間,TO必須大寫 query = parser.parse("id:[1 TO 6]"); // 開區間 query = parser.parse("id:{1 TO 3}"); /** * 查詢字符串中空格的,加上“” 完全匹配 */ query = parser.parse(""I like football""); // 查詢I和football中1個字符距離的 query = parser.parse(""I football"~1"); // 沒辦法匹配數字范圍,必須要自定義 query = parser.parse("attach:[2 TO 10]"); // 模糊匹配 query = parser.parse("name:make~"); su.searchByQueryParse(query, 10); }

 這是對term(最小分詞單元)的查詢

/** * 備注:這里的精確匹配查詢,是匹配索引文件中的詞。 * 如果 是搜索英文,忽視大小寫 * @param field * @param name * @param num */ public void searchByTerm(String field,String name,int num) { try { IndexSearcher searcher = getSearcher(); Query query = new TermQuery(new Term(field,name)); TopDocs tds = searcher.search(query, num); String[] path = FieldCache.DEFAULT.getStrings(reader, "name"); System.out.println(path.length); for(String p:path){ System.out.println(p); } System.out.println("查詢總數:"+tds.totalHits); for(ScoreDoc sd:tds.scoreDocs) { //System.out.println(sd.score);-查詢得分信息 Document doc = searcher.doc(sd.doc); System.out.println(doc.get("id")+"---->"+ doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+ doc.get("attach")+","+doc.get("date")); } searcher.close(); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
多值查詢(BooleanQuery)可以用來連接多個子查詢:

/** * 多值查詢 * @param num */ public void searchByBoolean(int num) { try { IndexSearcher searcher = getSearcher(); BooleanQuery query = new BooleanQuery(); /* * BooleanQuery連接多值查詢 * Occur.MUST表示必須出現 * Occur.SHOULD表示可以出現 * Occur.MUSE_NOT表示必須不能出現 */ query.add(new TermQuery(new Term("name","zhangsan")), Occur.MUST_NOT); query.add(new TermQuery(new Term("content","game")),Occur.SHOULD); TopDocs tds = searcher.search(query, num); System.out.println("命中數:"+tds.totalHits); for(ScoreDoc sd:tds.scoreDocs) { Document doc = searcher.doc(sd.doc); System.out.println(doc.get("id")+"---->"+ doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+ doc.get("attach")+","+doc.get("date")); } searcher.close(); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

 范圍搜索(TermRangeQuery):

/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String dir = "D:user"; try { Directory directory = FSDirectory.open(new File(dir)); @SuppressWarnings("deprecation") IndexReader reader = IndexReader.open(directory); IndexSearcher indexSearcher = new IndexSearcher(reader); /** * 范圍搜索 */ Term begin = new Term("datetime", "191111"); Term end = new Term("datetime", "198108"); /** * 參數Boolean值說明 false表示不包括 191111 true 表示包括198108 這兩個Boolean表示查詢結果 * 是不是包括lower,upper兩個臨界值 */ TermRangeQuery termRangeQuery = new TermRangeQuery("datetime", begin.bytes(), end.bytes(), false, true); TopDocs topDocs = indexSearcher.search(termRangeQuery, 10); ScoreDoc scoreDocs[] = topDocs.scoreDocs; for (int i = 0; i < scoreDocs.length; i++) { Document document = indexSearcher.doc(scoreDocs[i].doc); System.out.println(document.get("id")); System.out.println(document.get("name")); System.out.println(document.get("text")); System.out.println(document.get("datetime")); } directory.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }


數字范圍查詢:

public void searchByNumricRange(String field,int start,int end,int num) { try { IndexSearcher searcher = getSearcher(); Query query = NumericRangeQuery.newIntRange(field,start, end,true,true); TopDocs tds = searcher.search(query, num); System.out.println("命中數量:"+tds.totalHits); for(ScoreDoc sd:tds.scoreDocs) { Document doc = searcher.doc(sd.doc); System.out.println(doc.get("id")+"---->"+ doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+ doc.get("attach")+","+doc.get("date")); } searcher.close(); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

前綴搜索(PrefixQuery),注意也是對詞的前綴搜索:

/** * 前綴搜索 * @param field * @param value * @param num */ public void searchByPrefix(String field,String value,int num) { try { IndexSearcher searcher = getSearcher(); Query query = new PrefixQuery(new Term(field,value)); TopDocs tds = searcher.search(query, num); System.out.println("命中數:"+tds.totalHits); for(ScoreDoc sd:tds.scoreDocs) { Document doc = searcher.doc(sd.doc); System.out.println(doc.get("id")+"---->"+ doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+ doc.get("attach")+","+doc.get("date")); } searcher.close(); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

通配符搜索(WildcardQuery)

/** * 通配符查詢 ?和* * @param field * @param value * @param num */ public void searchByWildcard(String field,String value,int num) { try { IndexSearcher searcher = getSearcher(); //在傳入的value中可使用通配符?和*,問號表示匹配1個字符,*表示匹配任意多個字符 Query query = new WildcardQuery(new Term(field,value)); TopDocs tds = searcher.search(query, num); System.out.println("1共命中數:"+tds.totalHits); for(ScoreDoc sd:tds.scoreDocs) { Document doc = searcher.doc(sd.doc); System.out.println(doc.get("id")+"---->"+ doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+ doc.get("attach")+","+doc.get("date")); } searcher.close(); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

短語查詢(PhraseQuery),根據零碎的短語組合成新的詞組進行搜索,1般利用于英文搜索中

public void searchByPhrase(int num) { try { IndexSearcher searcher = getSearcher(); PhraseQuery query = new PhraseQuery(); //設置跳數 query.setSlop(3); query.add(new Term("content","pingpeng")); //第1個Term query.add(new Term("content","i")); //產生距離以后的第1個Term // query.add(new Term("content","football")); TopDocs tds = searcher.search(query, num); System.out.println("命中數:"+tds.totalHits); for(ScoreDoc sd:tds.scoreDocs) { Document doc = searcher.doc(sd.doc); System.out.println(doc.get("id")+"---->"+ doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+ doc.get("attach")+","+doc.get("date")); } searcher.close(); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

模糊匹配(searchByFuzzy),允許有個別毛病的查詢 

public void searchByFuzzy(int num) { try { IndexSearcher searcher = getSearcher(); //調劑類似讀 FuzzyQuery query = new FuzzyQuery(new Term("name","mase"),0.4f,0); System.out.println(query.getPrefixLength()); System.out.println(query.getMinSimilarity()); TopDocs tds = searcher.search(query, num); for(ScoreDoc sd:tds.scoreDocs) { Document doc = searcher.doc(sd.doc); System.out.println(doc.get("id")+"---->"+ doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+ doc.get("attach")+","+doc.get("date")); } searcher.close(); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 中文字幕亚洲在线 | 欧美一区不卡二区不卡三区 | 亚洲精品久久77777 | 成人亚洲在线观看 | 2021最新热播中文字幕 | 免费一级在线 | 久久一级视频 | 日韩最新网址 | 性欧美xxxx性 | 欧美一级毛片无遮挡内谢 | 性新婚a大黄毛片 | 秋霞免费手机理论视频在线观看 | 亚洲乱码在线 | 欧美日韩看片 | 福利视频欧美一区二区三区 | yellow中文字幕官网是 | 夜夜伊人 | 欧美三级韩国三级日本一级 | 在线国产中文字幕 | 三级做爰大爽长视频在线观看 | 欧美一区二区三区视频 | 暴力欧美娇小 videos | 亚洲欧美一区二区三区 | 亚洲天堂在线视频 | 亚洲性一区 | 日韩欧美视频一区二区在线观看 | 欧美日韩高清在线观看 | 国产高清片| 一级做a爰片性色毛片中国 一级做a爰全过程免费视频毛片 | 羞羞免费网站在线 | 免费观看黄色网址 | 日本高清在线观看视频www | 国产高清国内精品福利99久久 | 亚洲a色 | 伊人网在线播放 | 一区二区在线不卡 | 午夜成年视频 | 7777精品久久久大香线蕉 | 校园激情亚洲 | 国产一区二区三区久久精品小说 | 亚洲欧美日韩综合一区 |