Как найти слово «IN» в XML CLOB с помощью полнотекстового поиска Oracle? - PullRequest
3 голосов
/ 18 февраля 2012

Я пытаюсь отследить ошибку в некотором существующем коде, и я новичок в полнотекстовом поиске Oracle ...

У меня проблема с запросом, который возвращает строки, содержащие слово 'IN 'из документа xml.

Например, допустим, у меня есть фрагмент, хранящийся в CLOB в моей базе данных Oracle 10:

<a>
  <b>IN</b>
</a>

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

where contains(column, '(IN) INPATH (//b)') > 0;

Но это не возвращает результатов.Я попытался найти другие термины, такие как «AA» и «BS», и он отлично работает.

Я искал в Google и в документации Oracle зарезервированные слова, но не могусм. «IN», перечисленные там.Очевидно, что это зарезервированное слово в SQL, но я не вижу ссылки на него в полном тестовом поиске или документах XPATH.

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

Любой совет был бы очень признателен!

1 Ответ

2 голосов
/ 18 февраля 2012

Ваше предположение, вероятно, верно.В полнотекстовом поиске термин «стоп-слово».Если вы не определяете свой собственный стоп-лист, тогда используется значение по умолчанию: CTXSYS.DEFAULT_STOPLIST.См. эту статью для английского стоп-листа по умолчанию.В нем есть слово «in».

Вы можете удалить стоп-слова или создать собственный стоп-лист, используя пакет CTX_DDL , в частности CTX_DDL.REMOVE_STOPWORD или CTX_DDL.CREATE_STOPLIST.

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