Azure搜索API-搜索过滤器语法

时间:2019-08-13 17:24:29

标签: azure-cognitive-search

我正在使用azure搜索api尝试按某个字段值进行过滤:businesstype = store。即使我应该有数千家商店,它也总是会返回3家商店。我无法确定索引中包含什么。在Azure搜索Web门户中,我输入businessType eq'store',它给我两个商店,然后开始返回businesstype = restaurant。不知道发生了什么。我们在过滤器正常工作的其他项目中有其他实现。这是我使用ASP.NET Web API调用时正在执行的代码

  var indexClient = new SearchIndexClient(GlobalSettings.SearchServiceName, $"businesses{GlobalSettings.Environment}", new SearchCredentials(GlobalSettings.SearchServiceAdminApiKey));

        if (latitude == null && longitude == null)
        {
            //chicago
            latitude = 41.8333925;
            longitude = -88.0121478;
        }

        // get all attributes and camel case them
        var attributes = typeof(BusinessSearchItem).GetProperties().Select(x => char.ToLowerInvariant(x.Name[0]) + x.Name.Substring(1)).ToList();
        var parameters = new SearchParameters
        {
            Select = attributes,
            QueryType = QueryType.Full,
            Top = take,
            Skip = skip,
            IncludeTotalResultCount = true,
            OrderBy = new List<string>() { $"geo.distance(location, geography'POINT({longitude} {latitude})')" }
        };

        // filters
        string filter = "";
        if (!string.IsNullOrEmpty(businessType))
        {
            switch (businessType.ToLower())
            {
                case "restaurant":
                    filter += "businessType eq 'Restaurant'";
                    break;

                case "store":
                    filter += "businessType eq 'Store'";
                    break;
            }// end switch on business type
        }

        parameters.Filter = filter;

        try
        {
            // run the search
            var results = indexClient.Documents.Search<BusinessSearchItem>(q, parameters);
            Logger.Log.Info($"Search conducted. Query: {q} Business Type: {businessType} Lat: {latitude} Long: {longitude} User: {username}");
            var businessDTOs = results.Results.Select(x => new BusinessDTO
            {
             .........
            ).ToList()
            }).ToList();

模型BusinessSearchItem的字符串BusinessType字段具有可搜索的属性。跳过是0,取40。

1 个答案:

答案 0 :(得分:0)

问题根本不是搜索,这是因为数据不在索引中