Экранирование специальных символов и кодирование небезопасных и зарезервированных символов Синтаксис запроса Lucene Поиск Azure - PullRequest
0 голосов
/ 01 января 2019

У меня есть слова "C && K", "So`am`I", "Ant || Man", "A * B == AB", "Ant + Man" в index поиска по лазури.

В соответствии с Doc для экранирования специальных символов + - && || ! ( ) { } [ ] ^ " ~ * ? : \ / Мне нужно добавить к ним префикс с обратной косой чертой (\), а для небезопасных и зарезервированных символов необходимо кодировать их в URL.

для "C && K "мой поисковый URL => /indexes/{index-name}/docs?api-version=2017-11-11&search=C%5C%26%5C%26K~&queryType=full

для" So`am`I "мой поисковый URL => /indexes/{index-name}/docs?api-version=2017-11-11&search=So%5C%60am%5C%60I~&queryType=full

для" Ant || Man "мой поисковый URL =>/indexes/{index-name}/docs?api-version=2017-11-11&search=A%5C*B%3D%3DAB~&queryType=full

для "A * B == AB" URL моего поиска => /indexes/{index-name}/docs?api-version=2017-11-11&search=A%5C*B%3D%3DAB~&queryType=full

для "Муравья + Человек" URL моего поиска => /indexes/{index-name}/docs?api-version=2017-11-11&search=Ant%5C%2BMan~&queryType=full

Для всех них я не получаю результат поиска.Я получаю "value": []

для "C && K". Я также пытался

url => /indexes/{index-name}/docs?api-version=2017-11-11&search=C%5C%26%26K~&queryType=full

url => /indexes/{index-name}/docs?api-version=2017-11-11&search=C%26%5C%26K~&queryType=full

для"So`am`I" Я также пытался

url => /indexes/{index-name}/docs?api-version=2017-11-11&search=So%60am%60I~&queryType=full

Не работает.Что я тут не так делаю?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

В дополнение к ответу femtoRgon вы можете рассмотреть возможность использования собственного анализатора, который не индексирует их как несколько терминов, если вы всегда хотите, чтобы они были доступны для поиска в том виде, как они есть.Здесь есть документация по пользовательским анализаторам , и вы можете использовать Analyze API для тестирования, чтобы убедиться, что данный анализатор работает так, как вы ожидаете.

0 голосов
/ 02 января 2019

При стандартном анализе все они будут проиндексированы как несколько терминов.Однако нечеткие запросы не анализируются, поэтому он будет пытаться найти его как один термин.То есть, когда вы индексируете «Ant || Man», после анализа вы получаете в конце термины «муравей» и «человек».Когда вы ищете Ant||Man, он будет анализировать его почти так же, как и во время индекса, но при поиске Ant||Man~ запрос анализироваться не будет, и поскольку в индексе нет таких терминов, выне получит никаких совпадений.Аналогично, для «A * B == AB» вы получаете термины «b» и «ab» («a» - это стоп-слово с анализом по умолчанию).

Итак, попробуйте выполнить запросы без ~.

...