首页 > 解决方案 > 使用多个筛选器的 Azure 搜索

问题描述

我有三个过滤器,即需要应用于搜索查询的类别、子类别和产品类型。我目前正在使用 Azure 搜索。截至目前,我正在使用 odata 过滤器,如下面的代码所示。

SearchParameters parameters = new SearchParameters();

        string searchText = Request.Query["query"];
        string category = Request.Query["c"];
        string subCategory = Request.Query["sc"];
        string productType = Request.Query["pt"];

        parameters.Filter = $"Category/Id eq '{category}' or SubCategory/Id eq '{subCategory}'" +
                              $"or ProductType/Id eq '{productType}'";

我如何获得一个结果,如果用户应用 categoryId,那么它应该显示与该 Category Id 相关的结果。如果用户同时应用 categoryId 和 subcategoryId,他应该能够看到与指定过滤器类别匹配的两个产品和subcategory.If 只提交 producttypeId 那么他应该能够看到与该 producttypeId 相关的产品。当然,我可以使用 if 和 else 并使用“逻辑或”和“逻辑与”构建我的过滤器。如果有任何 Odata 库可以在这方面帮助我?

标签: c#azure-cognitive-searchasp.net-core-2.2

解决方案


感谢您的建议。我使用 OData FilterString 解决了这个问题

 string filterquery = FilterString.Generate<Product>(p => p.Category.Id == category && 
            p.SubCategory.Id == subCategory &&                            
            p.ProductType.Id == productType);

 parameters.Filter = filterQuery;

推荐阅读