lucene多条件查询
- 使用booleanQuery进行组合
- 特点是使用查询关键词已经是最小分词单元,不需要分词
- booleanQuery本身是一个布尔子句的容器,可以将lucene提供的Query子类添加到其中,标明子句之间的关系,组合条件后进行索引库查询
// 模糊条件
WildcardQuery w = new WildcardQuery(new Term(queryField,keyWord));
// 词条查询
TermQuery t = new TermQuery(new Term(queryField, keyWord));
// 相似度查询
FuzzyQuery f = new FuzzyQuery(new Term(queryField, keyWord));
//参数1:查询域字段名称
//参数2:指定查询起始角标
//参数3:指定查询结束角标
//参数4:左边开[不包含](闭[包含]: true)区间
//参数5:右边开(闭 : true)区间
NumericRangeQuery n = NumericRangeQuery.newLongRange(queryField, 5L, 15L, false, true);
// 查询所有
MatchAllDocsQuery m = new MatchAllDocsQuery();
BooleanQuery.Builder b = new BooleanQuery.Builder();
组合关系代表的意思如下:
// 1、MUST和MUST表示“与”的关系,即“交集”。
// 2、MUST和MUST_NOT前者包含后者不包含。
// 3、MUST_NOT和MUST_NOT没意义
// 4、SHOULD与MUST表示MUST,SHOULD失去意义;
// 5、SHOULD与MUST_NOT相当于MUST与MUST_NOT。
// 6、SHOULD与SHOULD表示“或”的关系,即“并集”。
b.add(w, BooleanClause.Occur.MUST);
b.add(t, BooleanClause.Occur.MUST_NOT);
b.add(f, BooleanClause.Occur.SHOULD);
b.add(n, BooleanClause.Occur.MUST);
b.add(m, BooleanClause.Occur.MUST);
BooleanQuery query = b.build();
// 读取索引库索引
DirectoryReader reader = DirectoryReader.open(FSDirectory
.open(Paths.get(filePath)));
// 创建检索索引库核心对象
IndexSearcher indexSearcher = new IndexSearcher(reader);
TopDocs topDocs = indexSearcher.search(query,查询条数);