Текстовый поиск по ключевым словам в 200 или около того символьном текстовом поле в базе данных - PullRequest
1 голос
/ 14 августа 2010

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

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

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

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

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

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

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

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

Спасибо всем!

Ответы [ 2 ]

1 голос
/ 14 августа 2010

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

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

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

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

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

1 голос
/ 14 августа 2010

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

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