【问题标题】:AzureSearch filter not working expectedAzureSearch 筛选器无法正常工作
【发布时间】:2018-07-13 15:51:07
【问题描述】:

我将我的 SQL 数据迁移到 AzureSearch 文档以尝试新的搜索体验。我无法使用 .net sdk (3.0.4) 过滤数据

public IActionResult Search(string state, string category, string search, short pageNumber = 1, short pageSize = 10)
    {
        SearchIndexClient indexClient = new SearchIndexClient(searchServiceName, "search", new SearchCredentials(searchServiceApiKey));

        DocumentSearchResult<SearchResultDto> results = null;
        if (string.IsNullOrWhiteSpace(search))
            search = "*";
        if (state.Equals("All", StringComparison.InvariantCultureIgnoreCase))
            state = string.Empty;

        SearchParameters parameters = new SearchParameters()
        {
            Filter = "state eq " + state,
            Top = pageSize,
            Skip = (pageNumber - 1) * pageSize,
            SearchMode = SearchMode.All,
            IncludeTotalResultCount = true
        };

        try
        {
            results = indexClient.Documents.Search<SearchResultDto>(search, parameters);
            return Ok(results.Results);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error querying index: {0}\r\n", ex.Message.ToString());
            throw ex;
        }
    }

我收到错误“调用的目标已引发异常。”

参数原始值:$count=true&$filter=state%20eq%20&queryType=simple&searchMode=all&$skip=0&$top=10

当我在 AzureSearch explore 中使用参数值时出现错误 无效的表达式: 'state eq delhi eq' 中位置 19 处的表达式。\r\n参数名称: $filter

我的代码有什么问题??

【问题讨论】:

  • 这里有两个问题。我将发布有关过滤器语法的答案,但我想获得有关“调用目标引发异常”错误的更多信息。这个错误是意外的(你应该得到一个 CloudException 代替)。您能否编辑您的问题以提供该错误的堆栈跟踪信息?

标签: azure-cognitive-search azure-search-.net-sdk


【解决方案1】:

您的过滤器存在一些问题。

  1. OData 中的字符串文字由单引号分隔。如果省略引号,则字符串看起来像字段名称,但在 Azure 搜索中不允许将字段与其他字段进行比较(索引中也可能没有名为 delhi 的字段)。试试 state eq 'delhi'。
  2. 您使用搜索资源管理器尝试的过滤器末尾有一个额外的 eq 运算符:“state eq delhi eq”。如果您删除多余的 eq 并在 delhi 周围加上单引号,它应该可以工作。
  3. 修复语法错误后,过滤器仍可能无法按预期工作。过滤器区分大小写,因此如果您尝试匹配的值实际上是带有大写 D 的“Delhi”,您将无法匹配。如果状态字段与可能有错误大小写的原始用户输入相匹配,则最好使用 searchText 参数而不是 Filter。

【讨论】:

  • 非常感谢。
猜你喜欢
  • 2021-11-30
  • 2017-04-07
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
相关资源
最近更新 更多