0
点赞
收藏
分享

微信扫一扫

10、学习Lucene3.5索引搜索之QueryParser

/**
* Lucene搜索之QueryParser
*/
public void searchByQueryParser(){
IndexSearcher indexSearcher = createIndexSearcher();
//1、创建QueryParser对象,参数二为默认搜索域
QueryParser queryParser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));
//改变空格代表的默认操作符(QueryParser.Operator.OR),比如改为“QueryParser.Operator.AND”
queryParser.setDefaultOperator(QueryParser.Operator.AND);
try {
/**
* 2、具体的搜索条件
* 注意:
* QueryParser.parse(String query)方法中,字符串和字符串之间出现空格的话,默认代表“or”。比如"aa cc"代表查询
* 的文本中,包含有“aa”或者“cc”字符串的文本。可以通过QueryParser.setDefaultOperator(QueryParser.Operator.OR)
* 设置空格代表的操作符
*/
Query query = queryParser.parse("aa bb");

/**
* 通过“:”改变搜索域,将搜索域改为“name”
*/
//普通搜索
query = queryParser.parse("name:aa");

//通配符搜索
query = queryParser.parse("name:a*");
/**
* 注意:因为搜索的值首位默认不容许为通配符(效率低,设计的时候,直接让这种情况抛出异常了),若非要将首
* 位设置为通配符,则要开启通配符功能
*/
//开启第一个字符的通配符匹配,默认关闭,因为效率较低
queryParser.setAllowLeadingWildcard(true);
//通配符默认不能放在首位,若需要,则需要开启
query = queryParser.parse("email:*@aa.com");
/**
* “-”代表没有,“+”代表有,“+”和“-”要放到域说明的前面,有空格
* "- name:aa + aa"意思:“name”不为aa,但是“content”中有“aa”的
*/
query = queryParser.parse("- name:aa + aa");

//匹配一个区间,“TO”必须大写,“[]”代表开区间,“{}”代表闭区间(左右界都不算)
query = queryParser.parse("id:[1 TO 3]");

//引号+字符串:完全匹配
query = queryParser.parse("\"aa is my\"");

//匹配“aa”和“my”之间有1个单词距离的
query = queryParser.parse("\"aa my\"~1");

//模糊查询,"name:acb~"能查询到“name”为“abb”的(记住模糊的前提是字符串长度一样)
query = queryParser.parse("name:acb~");

//queryParser.parse()没有办法匹配数字(需要自己扩展Parser)
excuteQuery(indexSearcher,query);
} catch (ParseException e) {
e.printStackTrace();
}
}


举报

相关推荐

0 条评论