Поиск Azure и использование заканчивается в массиве - PullRequest
0 голосов
/ 10 октября 2019

Я использую последний 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 (предварительный просмотр)

1 Ответ

0 голосов
/ 14 октября 2019

Насколько я понимаю, вы ищете фильтр-экспресс, который мог бы отфильтровать все записи, чья 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 ....

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

...