Azure Search - поиск по регулярному выражению - PullRequest
1 голос
/ 20 июня 2020

Я пытаюсь настроить Azure Search, чтобы найти строки со специальными символами, например AB C* DEF

Когда я ищу полный термин, используя "ABC*DEF", он работает

Проблема возникает, если я хочу использовать термин регулярного выражения:

  • Когда я использую частичный термин, например /(.*)ABC(.*)/, результат не имеет проблем
  • Когда я использую частичный член, например /(.*)DEF(.*)/, с результатом нет проблем
  • Но когда я пытаюсь найти что-то вроде /(.*)C\*D(.*)/, результат оказывается пустым.

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

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 20 июня 2020

Вы не сможете создать выражение регулярного выражения, которое соответствует AB C* DEF, используя стандартный анализатор.

Если вы запустите "ABC\*DEF" через api анализатора , используя "стандартный" анализатор, вы увидите, что ABC*DEF делится на 2 токена во время индексации -> "ABC" и "DEF". Выражения регулярных выражений не анализируются, однако они должны соответствовать токену, который существует в индексе.

Поскольку ABC\*DEF не существует в индексе (существуют только «AB C» и «DEF») , вы не сможете найти его, используя искомое выражение.

Использование анализатора ключевых слов сохранит все поле как единый токен, поэтому, если поле «только» содержит выражение ABC\*DEF, тогда выражение регулярного выражения будет работать с ним, однако, если ABC\*DEF является частью большего абзаца текста, то, вероятно, это не то, что вы хотите использовать.

Лучше всего создать настраиваемый анализатор , который токенизирует ваш текст таким образом, чтобы сохранить специальные символы, относящиеся к вашему варианту использования.

0 голосов
/ 20 июня 2020

Если вы ищете специальные символы, почему бы вам не отбросить обычные символы?

[^\w]
...