1、具体的查询语句
/** * 执行具体的查询 */ private void excuteQuery(IndexSearcher indexSearcher, Query query) { try { TopDocs topDocs = indexSearcher.search(query, 2); System.out.println("查询出来的总条数:"+topDocs.totalHits); ScoreDoc[] scoreDocs = topDocs.scoreDocs; if (isNotEmpty(scoreDocs)){ for (ScoreDoc scoreDoc:scoreDocs){ Document document = indexSearcher.doc(scoreDoc.doc); System.out.println("("+scoreDoc.doc+")"+document.get("name")+"["+document.get("email")+"]-->"+document.get("id") + "," +document.get("attach") ); } } } catch (IOException e) { e.printStackTrace(); } finally { closeIndexSearcher(indexSearcher); } }
2、精确查询
/** * Lucene搜索之TermQuery */ public void searchByTermQuery(String field, String value){ Query query = new TermQuery(new Term(field, value)); IndexSearcher indexSearcher = createIndexSearcher(); excuteQuery(indexSearcher,query); }
3、文本范围查询
/** * Lucene搜索之TermRangeQuery */ public void searchByTermRangeQuery(String field, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper){ IndexSearcher indexSearcher = createIndexSearcher(); /** * TermRangeQuery(String field, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper): * 参数一:域 * 参数二:开始字符 * 参数三:结束字符 * 参数四:是否包含开头 * 参数五:是否包含结尾 */ Query query = new TermRangeQuery(field, lowerTerm, upperTerm, includeLower, includeUpper); excuteQuery(indexSearcher,query); }
4、数字范围查询
/** * Lucene搜索之NumericRangeQuery(查询数字范围) */ public void searchByNumericRangeQuery(String field, Integer min, Integer max, boolean minInclusive, boolean maxInclusive){ IndexSearcher indexSearcher = createIndexSearcher(); /** * TermRangeQuery(String field, Integer min, Integer max, boolean minInclusive, boolean maxInclusive): * 参数一:域 * 参数二:最小值 * 参数三:最大值 * 参数四:是否包含最小值 * 参数五:是否包含最大值 */ Query query = NumericRangeQuery.newIntRange(field,min,max,minInclusive,maxInclusive); excuteQuery(indexSearcher, query); }