- // 与或搜索BooleanQuery
- //BooleanClause用于表示布尔查询子句关系的类,包括:BooleanClause.Occur.MUST,BooleanClause.Occur.MUST_NOT,BooleanClause.Occur.SHOULD。有以下6种组合:
- //1.MUST和MUST:取得连个查询子句的交集。
- //2.MUST和MUST_NOT:表示查询结果中不能包含MUST_NOT所对应得查询子句的检索结果。
- //3.MUST_NOT和MUST_NOT:无意义,检索无结果。
- //4.SHOULD与MUST、SHOULD与MUST_NOT:SHOULD与MUST连用时,无意义,结果为MUST子句的检索结果。与MUST_NOT连用时,功能同MUST。
- //5.SHOULD与SHOULD:表示“或”关系,最终检索结果为所有检索子句的并集。
另外, 你还可以在以上的组合之上再次组合,下面是我的应用示例
BooleanQuery.SetMaxClauseCount(int.MaxValue);
List<SimpleBookInfo> books = new List<SimpleBookInfo>();
WildcardQuery wq1 = new WildcardQuery(new Term("author", "*" + author + "*"));
WildcardQuery wq2 = new WildcardQuery(new Term("bookname", "*" + bookname + "*"));
BooleanQuery query = new BooleanQuery();
BooleanQuery searchQuery = new BooleanQuery();
if (should)
{
searchQuery.Add(wq1, BooleanClause.Occur.SHOULD);
searchQuery.Add(wq2, BooleanClause.Occur.SHOULD);
}
else
{
searchQuery.Add(wq1, BooleanClause.Occur.MUST);
searchQuery.Add(wq2, BooleanClause.Occur.MUST);
}
query.Add(searchQuery, BooleanClause.Occur.MUST);
if (!string.IsNullOrEmpty(Original))//2012-01-07增加正版字段过滤
{
if (Original.Equals("0"))
{
Original = "00000000000000";//索引值竟然生成了这个MD
}
if (Original.Equals("1"))
{
Original = "00000000000001";//索引值竟然生成了这个MD
}
TermQuery qu = new TermQuery(new Term("original", Original));
query.Add(qu, BooleanClause.Occur.MUST);
}
List<SimpleBookInfo> books = new List<SimpleBookInfo>();
WildcardQuery wq1 = new WildcardQuery(new Term("author", "*" + author + "*"));
WildcardQuery wq2 = new WildcardQuery(new Term("bookname", "*" + bookname + "*"));
BooleanQuery query = new BooleanQuery();
BooleanQuery searchQuery = new BooleanQuery();
if (should)
{
searchQuery.Add(wq1, BooleanClause.Occur.SHOULD);
searchQuery.Add(wq2, BooleanClause.Occur.SHOULD);
}
else
{
searchQuery.Add(wq1, BooleanClause.Occur.MUST);
searchQuery.Add(wq2, BooleanClause.Occur.MUST);
}
query.Add(searchQuery, BooleanClause.Occur.MUST);
if (!string.IsNullOrEmpty(Original))//2012-01-07增加正版字段过滤
{
if (Original.Equals("0"))
{
Original = "00000000000000";//索引值竟然生成了这个MD
}
if (Original.Equals("1"))
{
Original = "00000000000001";//索引值竟然生成了这个MD
}
TermQuery qu = new TermQuery(new Term("original", Original));
query.Add(qu, BooleanClause.Occur.MUST);
}
浙公网安备 33010602011771号