Lucene5(5)搜索api

来源:互联网 发布:淘宝退换货流程表 编辑:程序博客网 时间:2024/03/28 19:49

1、使用QueryParser搜索

QueryParser queryParser = new QueryParser("context",getAnalyzer());Query query = null;query = queryParser.parse("Identified");// 完整匹配分词查询/** * 通配符 ?,*的使用 */// 使用?匹配单个字符查询//query = queryParser.parse("Identi?ied");// 使用*匹配多个字符查询//query = queryParser.parse("L*r");/** * 布尔运算AND, OR,NOT,+,-的使用,注意:一定要是大写的AND和OR,NOT */// 使用OR联合多关键字查询,也可用空格代替OR//query = queryParser.parse("Licensor OR ce*");// 这个和使用OR一样的效果//query = queryParser.parse(" Licensor ce*");// +代表必须的条件,搜索文档必须包含Licensor 可能有Wildcard//query = queryParser.parse("+Licensor Wildcard");// 使用AND取多个关键字的并集查询//query = queryParser.parse("Licensor AND ce* AND Licenso?");// 搜索Lincensor Apache而不是Apache Licensor//query = queryParser .parse("'Lincensor Apache' NOT 'Apache Licensor'");// "-"同NOT的效果一样//query = queryParser .parse("'Lincensor Apache' - 'Apache Licensor'");/** * 使用正则表达式查询 */// 这个匹配Lincensor,aicensor,bicensor分词//query = queryParser.parse("/[Lab]icensor/");// 根据需要可以更灵活的使用//query = queryParser.parse("/[Lab]icenso[a-z]/");/** * 使用~模糊匹配查询 这个要和*号的用法区分下,*号完整通配多个字符查询,而~不是简单的通配,这个模糊匹配和Lucene的评分有关 */// 可以查到Licensor关键字,而queryParser.parse("icensor*")查不到//query = queryParser.parse("icensor~");// ~后面可加0-2的整数来制定模糊匹配度,默认不加为1//query = queryParser.parse("Licens~1");// ~还可以模糊匹配差异化N字符数的多个关键字//query = queryParser.parse("Licens cens ~0");/** * 范围查询,多用于数字和时间的查询 */// {}abc与Licenszhi间的文件,不包含//query = queryParser.parse("{abc TO Licens}");// {}abc与Licenszhi间的文件,包含本身//query = queryParser.parse("[abc TO Licens]");/** * 关键字加权处理查询 */// 默认为1,可加权可降权,可通过加权处理给匹配的结果排序//query = queryParser.parse("Licensor Wildcard^4 ");// 可使用()组合多个条件查询//query = queryParser .parse("(+Licensor  +Wildcard) AND easier");// ps: 查询部分字符需要转义处理,如(+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /)

2、使用Query继承类搜索

QueryParser queryParser = new QueryParser("context",getAnalyzer());Query query = null;// 搜索特定的项//query = new TermQuery(new Term(field,value));//TermRangeQuery 搜索特定范围的项.这个 Query 不适用于数字范围查询,数字范围查询请使用 NumericRangeQuery 代替//query = new TermRangeQuery(field,new BytesRef(start.getBytes()),new BytesRef(end.getBytes()),true,true);//NumericRangeQuery 搜索数字范围的项//query = NumericRangeQuery.newIntRange(field,start,end,true,true);//PrefixQuery 前缀匹配搜索//query = new PrefixQuery(new Term(field,value));//WildcardQuery 通配符搜索//query = new WildcardQuery(new Term(field,value));//FuzzyQuery 模糊匹配搜索.搜索的关键字即使有错,在一定范围内都可以被搜索到//query = new FuzzyQuery(new Term(field,value),maxEdits,prefixLength);//BooleanQuery 多个条件的查询//BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();//Query query1 = new TermQuery(new Term("",""));//Query query2 = new TermQuery(new Term("",""));//booleanQueryBuilder.add(query1,BooleanClause.Occur.MUST);//booleanQueryBuilder.add(query2,BooleanClause.Occur.MUST);//query = booleanQueryBuilder.build();//PhraseQuery 短语查询//PhraseQuery.Builder phraseQueryBuilder = new PhraseQuery.Builder();//phraseQueryBuilder.setSlop(1); // 两个短语间最大的单词间隔//phraseQueryBuilder.add(new Term(field,value1));//phraseQueryBuilder.add(new Term(field,value2));//query = phraseQueryBuilder.build();
原创粉丝点击