1

lucene5(5)搜索api

 2 years ago
source link: https://wakzz.cn/2017/10/01/lucene5/(5)%E6%90%9C%E7%B4%A2api/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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();

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK