Поиск и использование Azure заканчивается в массиве

Я использую последний Microsoft.Azure.Search SDK со следующими параметрами поиска. У меня есть идентификаторы фильтров: MFR-1, MFR-2, MFR-3 и т. Д. Я пытаюсь вернуть ЛЮБУЮ запись, которая имеет идентификатор фильтра, который начинается с MFR.

Кажется, что это должен быть простой запрос, но я не нахожу способ заставить это работать с 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"
],
}

Я пробовал это, но похоже, что он не работает с массивами, как следует из названия.

Содержит / в массиве в Поиске Azure (предварительная версия)


person Matty    schedule 10.10.2019    source источник


Ответы (1)


Насколько я понимаю, вы ищете экспресс-фильтр, который мог бы фильтровать всю запись, чья FilterIDs строковая коллекция (массив) содержит значение элемента, начинающееся с «MFR».

Как официальный документ указал:

Внутри лямбда-выражений для коллекций строк можно использовать только операторы сравнения eq и ne.

Поэтому я боюсь, что здесь нет возможности выполнять нечеткий поиск.

Но если идентификаторы ваших фильтров перечислимы, возможно, вы можете использовать экспресс-фильтр, как показано ниже:

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

Я думаю, что это будет работа здесь, это работает для меня с моей стороны. Надеюсь, это поможет.

person Stanley Gong    schedule 14.10.2019
comment
Я бы использовал это, чтобы сократить код: FilterIDs/any(c: search.in(c, 'MFR-57, MFR-94')), хотя, возможно, было бы разумнее объединить поля в одну строку, а затем выполнить запрос подобного типа. Спасибо за ответ ... Буду искать решение. У нас есть тысячи производителей. - person Matty; 14.10.2019