Текстовый поиск по ключевым словам приблизительно в 200 символьных текстовых полях на базе данных

Вот ситуация, чрезвычайно благодарная за любой вход, который любой может иметь:

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

Я хочу дать пользователям способность перерыть эти объекты путем ввода строки поиска. В самом простом случае, который может быть достаточно, это было бы, как будто я выполнялся "и где продукт как '%searchString %'" в моем sql.

Хорошие новости - то, что, хотя существуют строки на 100 м, любой данный пользователь только интересуется их собственными строками, из которых существует гораздо меньше с крупнейшим пользователем, возможно, имеющим строки на 2 м в таблице.

Будут другие части к их запросам, например, "где цена> 100 и продукт как '%searchString %'".

Делает 'как' мой лучший выбор или там некоторые хорошие инструменты любой в Oracle (дб, который я использую), или возможно некоторое внешнее средство индексирования. Я видел упоминание о тексте Oracle, но не знаю много об этом.

Проблема немного более трудна, чем просто выполнение простой индексации всех ключевых слов, появляющихся в названии продукта, потому что они могут также искать на, скажем, части SKU. Таким образом, название продукта может включать SKU DFR45G6TY, и они просто хотят вставить 'DFR', чтобы выбрать его и не иметь для ввода полной строки SKU. (Если я должен пропустить эту функциональность, она может все еще быть в порядке..)

Кто-либо может указать на меня в правильном направлении для того, как я должен заняться этим? Ресурсы, подсказки, идеи, продукты, что-либо с благодарностью полученное!

Спасибо все!

1
задан Bruce 14 August 2010 в 06:42
поделиться

2 ответа

Oracle Text кажется правильным решением, хотя для всего 200 байт в одной таблице это может быть излишним.

Если они, скорее всего, введут левую часть названия продукта, тогда подойдет простой, проиндексированный в поле. Он по-прежнему вернет все продукты DFR%, которых могут быть десятки тысяч, но вы ничего не можете сделать, чтобы это контролировать (кроме, возможно, предупреждения пользователя, если он вводит «короткий» поиск, это может занять некоторое время).

Если артикул не находится в начале строки продукта, вы можете создать индекс для артикула, а не всего продукта.

SUBSTR(product_name,<offset to start of SKU string>

С другой стороны, если вам нужно обработать диапазон произвольных поисков, вам придется либо перенормировать все компоненты строки названия вашего продукта в другую таблицу, либо использовать Oracle Text.

1
ответ дан 2 September 2019 в 22:09
поделиться

Я бы не стал сбрасывать со счетов Oracle Text - ознакомьтесь с различными параметрами конфигурации, SUBSTRING_INDEX выглядит многообещающим - эта страница должна оказаться полезной.

1
ответ дан 2 September 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: