MarkLogic - поиск по шаблону не возвращает результаты - PullRequest
2 голосов
/ 06 июля 2019

Мы реализовали API через xquery, используя search: search.

При поиске «Умение / матрица» он возвращает данные.

Когда мы ищем Умение? Матрица ИЛИ * ill /матрица, возвращает ноль записей или иногда выдает исключение с превышением времени.

Другие поиски с подстановочными знаками работают нормально, как преобразование? r * 1 ИЛИ инвертирование? г * ИЛИ выпрямление?*

Параметр подстановочного знака в базе данных и уровне «Word Query» установлены в значение true

  • конечный поиск по подстановочным знакам
  • конечные позиции подстановочных слов

Так не знаете, как отладить и решить эту проблему?

1 Ответ

2 голосов
/ 08 июля 2019

Поиск по шаблону не grep.Символ подстановки будет заменять символы в одном и том же слове.Таким образом, Skill?matrix ищет совпадение одного слова с буквой от Skill до matrix, но в Skill/matrix такого слова нет, потому что это фраза, включающая два слова с пунктуацией между ними.Вместо этого можно выполнить поиск фразы «Матрица умений» без учета пунктуации и пробелов, и она будет соответствовать и будет гораздо более эффективной.

Значение *ill/matrix должно совпадать, но в зависимости от настроек индекса и запроса оно можетпытаться выполнить полное совпадение *ill со словом лексикон или, если у вас нет слова лексикон, он может попытаться выполнить отсканированное сканирование всей базы данных.Посмотрите, каков ваш план запроса (xdmp:plan).Если у вас есть трехсимвольный индекс и вы передаете явную опцию lexicon-expand=off в запрос, он будет выполняться быстрее.Просто включить конечные символы подстановки, но попытка использовать ведущие символы подстановки не будет работать хорошо.

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

...