lucene5(5)搜索api

1、使用QueryParser搜索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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继承类搜索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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();