Как искать с учетом регистра в индексе без учета регистра

Мне нужно запросить более 100 слов (без учета регистра), которые хранятся в отдельной таблице.

Select a_id, text from xy
inner join keywords kw on contains(xy.text, kw.word)>0

Это прекрасно работает. Но теперь у меня есть одно ключевое слово, которое нужно запрашивать с учетом регистра.

Кто-нибудь знает, как это сделать, не создавая индекс с учетом регистра и не запрашивая это ключевое слово отдельно? Возможно ли игнорировать ключевое слово, скажем, «нас», и создавать индекс только с ключевым словом, написанным заглавными буквами («США»).

Я попробовал добавить «нас» к стоп-словам, но это не сработало.


person Ursin    schedule 16.10.2014    source источник
comment
Используйте UPPER или LOWER для обоих столбцов и создайте индекс на основе функций, поскольку обычный индекс будет пропущен.   -  person Lalit Kumar B    schedule 16.10.2014
comment
Я думаю, что это не будет работать с текстом оракула.   -  person Ursin    schedule 16.10.2014
comment
Если вы используете версию 11g или более позднюю, вы можете добавить виртуальный столбец, всегда сгенерированный как UPPER столбца, и использовать его.   -  person Lalit Kumar B    schedule 16.10.2014
comment
И если вы ищете поиск без учета регистра, взгляните на lalitkumarb.wordpress.com/2014/01/22/   -  person Lalit Kumar B    schedule 16.10.2014


Ответы (1)


Добавьте столбец case_sensitive char(1) -- Y/N в таблицу keywords, затем:

select a_id, text
from xy
join keywords kw on contains(xy.text, kw.word) > 0
  and (kw.case_sensitive = 'N' or instr(xy.text, kw.word) > 0)

Индекс по-прежнему будет использоваться, но для ключевых слов, чувствительных к регистру, существует дополнительное требование: ключевое слово должно отображаться в тексте дословно.

person Bohemian♦    schedule 22.03.2018