Как правильно отформатировать метасимволы и параметры регулярного выражения при использовании оператора регулярного выражения в $ searchBeta в MongoDB? - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь выполнить полнотекстовый поиск в MongoDB с помощью $ searchBeta (агрегация), и для этого я использую оператор 'regex'. Вот часть $ searchBeta, которая у меня есть, которая не работает так, как я ожидал:

$searchBeta: {
    regex: {
        query: '\blightn', // '\b' is the word boundary metacharacter
        path: ["name", "set_name"],
        allowAnalyzedField: true
    }
}

Вот пример двух документов, которые я ожидаю получить с помощью выражения:

{
    "name": "Lightning Bolt"
    "set_name": "Masters 25"
},
{
    "name": "Chain Lightning",
    "set_name": "Battlebond"
}

Что я на самом деле получаю:

[] //empty array

Если я использую выражение вроде:

$searchBeta: {
    regex: {
        query: '[a-zA-Z]'
        path: ["name", "set_name"],
        allowAnalyzedField: true
    }
}

, тогда я получаю результаты обратно.

Я могу не работает любое выражение, содержащее метасимволы и / или параметры регулярного выражения, поэтому я почти уверен, что просто неправильно ввел его в строку запроса. Документация по регулярному выражению $ searchBeta на самом деле не описывает, как форматировать метасимволы в строке запроса. Кроме того, оператор регулярного выражения $ searchBeta отличается от оператора регулярного выражения $, потому что он не требует косой черты (то есть «/ ваше выражение /»). На самом деле тяну мои волосы за что-то настолько простое, что я не могу понять.

1 Ответ

0 голосов
/ 23 апреля 2020

$searchBeta использует Lucene для регулярных выражений, который не Perl совместим (PCRE) и не поддерживает \b. Вы можете прочитать о синтаксисе Lucene regex здесь , а также Документы Elasti c , на которых он также полезен.

Вот подобный вопрос для ElasticSearch и включает некоторые обходные пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...