Я использую Oracle 11g и Oracle Text для поисковой системы.
Теперь я создал и проиндексировал текстовый столбец CLOB Keywords
, который содержит слова, разделенные пробелами. Это позволило мне расширить поиск, поскольку Oracle Text будет возвращать строки, содержащие одно или несколько ключевых слов, хранящихся в этом столбце. Содержимое столбца скрыто от пользователя и используется только для «расширения» поиска. Это работает по назначению.
Но теперь мне нужно поддерживать несколько слов или даже целых предложений. При текущей конфигурации Oracle Text будет искать только отдельные ключевые слова. Как мне сохранить фразы и настроить Oracle Text так, чтобы он искал фразы целиком (точное совпадение предпочтительнее, но нечеткое совпадение тоже подойдет)?
Пример содержимого столбца из двух строк (значения, разделенные точкой с запятой):
"hello, hello; is there anybody out there?; nope;"
"just the; basic facts;"
Я нашел аналогичный вопрос: Поиск в столбце со значениями, разделенными запятыми, за исключением того, что мне нужно решение для Oracle 11g с функцией поиска свободного текста.
Возможные решения:
1-е решение: я думал о перепроектировании БД следующим образом. Я бы сделал новую таблицу Keywords(pkID NUMBER, nonUniqueID NUMBER, singlePhrase VARCHAR2(100 BYTE))
. И я бы изменил предыдущий столбец Keyword
на KeywordNonUniqueID
, который будет содержать идентификатор (вместо списка значений). Во время поиска я бы INNER JOIN с новой таблицей Keyword
. Проблема с этим решением заключается в том, что я получу несколько строк, содержащих одни и те же данные, кроме фразы. Я предполагаю, что это разрушит рейтинг?
2-е решение: возможно ли хранить фразы в виде XML в исходном столбце Keyword
и каким-то образом указывать Oracle Text для поиска в XML?
3-е решение:?
Обратите внимание, что, как правило, фраз не будет много (менее 100) и они не будут длинными (в одной фразе может быть до 5 слов).
Также обратите внимание, что в настоящее время я использую CONTAINS
и несколько его операторов для полнотекстового поиска.
EDIT: это https://forums.oracle.com/forums/thread.jspa?messageID=10791361 обсуждение, которое почти решает мою проблему, но оно также соответствует отдельным словам, а не всей фразе (точное соответствие).