【问题标题】:Azure Search and using ends with in ArrayAzure 搜索和使用以数组结尾
【发布时间】:2019-10-14 17:27:35
【问题描述】:

我正在使用具有以下搜索参数的最新Microsoft.Azure.Search SDK。我有 MFR-1、MFR-2、MFR-3 等的过滤器 ID。我正在尝试恢复任何具有以 MFR 开头的过滤器 ID 的记录。

这似乎应该是一个简单的查询,但我没有找到一种方法来使它与 SDK 一起工作。

var Params = new SearchParameters()
{
    SearchMode = SearchMode.Any,
    QueryType = QueryType.Full,
    Top = 72,
    Skip = 0,
    IncludeTotalResultCount = true,
    Filter = "FilterIDs/any(c: c eq 'MFR-57')",
    OrderBy = new List<string> { "Sort", "Title"},
    Facets = new List<string>() { "Filters,count:500,sort:value" }
};

数据如下所示:

{
"id": "691",
"RecordType": "product",
"FilterIDs": [
    "MFR-106",
    "36-250",
    "36-265"
],
}

我已经尝试过了,但它似乎不适用于标题所暗示的数组。

Contains / in array in Azure Search (Preview)

【问题讨论】:

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


    【解决方案1】:

    根据我的理解,您正在寻找一种过滤器快递,它可以过滤所有记录,其 FilterIDs 字符串集合(数组)包含以 "MFR" 开头的项目值。

    正如official doc 指出的那样:

    字符串集合的内部 lambda 表达式,唯一的比较 可以使用的运算符有 eq 和 ne。

    所以这里恐怕没有办法进行模糊搜索。

    但如果你的过滤器 id 是可枚举的,也许你可以使用如下过滤器表示:

    FilterIDs/any(c: c eq 'MFR-1') or FilterIDs/any(c: c eq 'MFR-2') or FilterIDs/any(c: c eq 'MFR-3') or ....
    

    我认为这将是一个工作,它对我有用。 希望能帮助到你。

    【讨论】:

    • 我会用它来缩短代码:FilterIDs/any(c: search.in(c, 'MFR-57, MFR-94')) 尽管将字段组合成一个字符串然后执行“like”类型查询可能更有意义。感谢您的回答...我会继续寻找解决方案。我们有 1000 家制造商。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多