您可以使用BoolQuery接口进行多条件的组合查询。BoolQuery可以包含一个或者多个子查询条件,根据子查询条件是否满足来判断一行数据是否满足查询条件。

参数说明

您可以设置多种组合方式。例如,设置多个子查询条件为mustQueries,即要求这些子查询条件必须都满足。设置多个子查询条件为mustNotQueries时,即要求这些子查询条件都不能满足。

BoolQuery包含以下参数:
/// <summary>
/// 文档必须完全匹配所有的子query
/// </summary>
public List<IQuery> MustQueries { get; set; }
/// <summary>
/// 文档必须不能匹配任何子query
/// </summary>
public List<IQuery> MustNotQueries { get; set; }
/// <summary>
/// 文档必须完全匹配所有的子filter,区别是不会进行算分
/// </summary>
public List<IQuery> FilterQueries { get; set; }
/// <summary>
/// 文档应该至少匹配一个should,匹配多的得分会高
/// </summary>
public List<IQuery> ShouldQueries { get; set; }
/// <summary>
/// 定义了至少满足几个should子句,默认是1。
/// </summary>
public int? MinimumShouldMatch { get; set; }

示例

/// <summary>
///联合查询(复杂查询条件下用的最多的一个查询)。Bool查询由一个或者多个子句组成,每个子句都有特定的类型。
///must: 文档必须完全匹配条件
///should: should下面会带一个以上的条件,至少满足一个条件,这个文档就符合should
///must_not: 文档必须不匹配条件
///MinimumShouldMatch: should查询的条件至少满足几个
/// </summary>
/// <param name="otsClient"></param>
public static void BoolQuery(OTSClient otsClient)
{
    Console.WriteLine("\n Start bool query...");

    var searchQuery = new SearchQuery();
    searchQuery.GetTotalCount = true;
    var boolQuery = new BoolQuery();
    var shouldQuerys = new List<IQuery>();
    shouldQuerys.Add(new TermQuery(Keyword_type_col, new ColumnValue("SearchIndex")));
    houldQuerys.Add(new TermQuery(Keyword_type_col, new ColumnValue("TableStore")));
    boolQuery.ShouldQueries = shouldQuerys;
    boolQuery.MinimumShouldMatch = 1;

    searchQuery.Query = boolQuery;

    var request = new SearchRequest(TableName, IndexName, searchQuery);
    request.ColumnsToGet = new ColumnsToGet()
    {
        ReturnAll = true
    };

    var response = otsClient.Search(request);

    Console.WriteLine("Total Count:" + response.TotalCount);
    foreach (var row in response.Rows)
    {
        PrintRow(row);
    }
}