Oracle текст содержит и разметка имеют другое поведение - PullRequest
0 голосов
/ 20 апреля 2020

У меня проблема с текстом Oracle. Я ищу так:

WHERE
    ( contains(description_en, '%to_search.%', 1) > 0 );

Теперь Oracle возвращает мне строку, где есть «to_search», но без точки. Я подозреваю, что это потому, что Oracle обрабатывает это как разрыв слов (Примечание: Стоплист пуст)

Но если я попытаюсь выделить найденный результат с помощью вызова ctx_doc.markup:

ctx_doc.markup(
      index_name => 'i_fil_lis_ce_fil_des_en',
      textkey => '12238',
      text_query => '%to_search.%',
      starttag => '<result>',
      endtag => '</result>',
      plaintext => true)

Он не выделит to_search, если я не уберу точку в text_key. Это поведение то же самое для других символов, таких как ? / , / @. Это не имеет смысла для меня, разве oracle не должны относиться к обоим случаям точки одинаково?

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

Версия: Oracle База данных 12 c Выпуск Enterprise Edition 12.1.0.2.0 - 64 бита

Ответы [ 2 ]

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

В соответствии с текстовыми документами Oracle

Обратите внимание на символы, не являющиеся алфавитом c. ? / et c считаются пробелами (поэтому to_search. обрабатывается как to_search). Для соответствия только to_search. Вы должны объявить "." как printjoin . (Однако, если вы это сделаете, to_search. Не будет соответствовать 'to_search.') Подробнее о printjoins см. BASIC_LEXER

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

Проверьте конфигурацию лексера. Я думаю, что точка просто игнорируется лексером. А текст «словарный запас» не содержит слова «тест».

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