|
Страница 1 из 1 [ Сообщений: 12 ] |
Автор |
Сообщение |
Kwazar
новый человек
|
|
Заранее прошу прощения за достаточно специфичные вопросы по программированию заданные на дизайнерском форуме. Однако передо мною стоит сейчас достаточно трудоемкая задача, которая хоть и выполнима, но имеет несколько путей решения. Осталось определиться и разобраться в них.
Вопрос 1 для использования поиска по сайтам (типа ya.ru, но попроще), должна быть достаточно большая база данных. Как вы считаете, надо или использовать индексы, т.к. хоть и пишут, что они на порядок ускоряют поиск в ней, но при больших объемах данных, говорят, что выборка данных будет происходить еще дольше, чем без использования индексов. Поиск будет происходить по включению, т.е. с использованием like, который сам по себе немного подормаживает. Если индексы все же полезны то какого типа их луше использовать? В+ деревья? Объедененные индексы? (битовые индексы точно не подойдут - столбцы будут иметь явно не малую мощность).
Вопрос 2 существуют ли стандартные методы в SQL92 или SQL99, позволяющие всти поиск по "частичному включению". Т.е. при запросе на слово "мыша" , будут найденны слова: "миша", "мышь", … (наподобе ворд проверяет синтаксические ошибки). Существуют ли какие-нибудь оступные к просмотру алгоритмы для этого?
Заранее спасибо
|
|
|
|
|
Kwazar
новый человек
|
|
Long, благодарю за совет, но мне этот вариант не подходит. Говорил сейчас с заказчиками - они хотят использовать Oracle, следовательно про like действительно можно забыть [img]images/smiles/icon_smile.gif[/img] Ранее оговаривалась БД MySQL (я их долго долбил, что не стоит использовать эту фигню). Далее. Поиск по словарю словоформ. Уже готов мой собственный модуль под perl для этого. Так что на Лебедева можно забить. Но первый вопрос все же актуален. Поиск по таблице индесксов исходного слова. Дык даже Oracle с его удобствами, не входящими с стандарт SQL 92 и SQL 99 будет тормозить при большом количестве данных. Хотя я и сделал алгоритм сортировки слов про определленным признакам, который на порядок ускоряет поиск - этого все равно будет не достаточно. Так что вопрос остается открытым [img]images/smiles/icon_smile.gif[/img]
Насчет второго вопроса - ладно, оюбойдусь пока без этой функции. Буду думать позже...
|
|
|
|
|
Kwazar
новый человек
|
|
Long, нет, вы меня не правильно поняли. Он подерживат полностью стандарт SQL. Плюс еще масса приятностей, благодоря которым прото грез не отказаться от Like, т.е. есть более быстрые вещи [img]images/smiles/icon_wink.gif[/img] Так что нет поводов для паники
|
|
|
|
|
Kwazar
новый человек
|
|
а твой модуль ищет не по словарю? [img]images/smiles/icon_biggrin.gif[/img] Нет, он использует правила русского языка (поиск руссоязычный). Так гораздо удобнее и быстрее (меньше данных обрабатываются)
|
|
|
|
|
Kwazar
новый человек
|
|
Long, кстати, не стоит так боятся Оракла. Это великолепная БД [img]images/smiles/icon_smile.gif[/img]
|
|
|
|
|
Original Demon
постоянный участник
|
|
Kwazar подробней про запрос, иначе не совсем понятно, что собственно нужно
|
|
|
|
|
Kwazar
новый человек
|
|
Я сам не понял вашего вопроса. Короче есть большая БД. Таблица имет очень большую мощьность (т.е. в них нету маленького количества шаблонных значений). Мне нужнно ускорить по ней поиск и выборку строк. Все просто. Проблеммы с местом на диске нет. Для ускорения поиска я иногда использую индексы. Но сейчас стоит ли их использовать. И какие лучше, именно для этой задачи?
|
|
|
|
|
Kwazar
новый человек
|
|
Original Demon, спасибо, но это я и так знаю...
|
|
|
|
|
cobalt
новый человек
|
|
индексы значительно ускоряют запрос на выборку. Поэтому их следует обязательно использовать. Индексировать лучше по столбцу, который используется в условиях отбора. обычно для поиска используются две таблицы - первая содержит все слова на сайте, а вторая все ссылки на эти слова но всех страницах (или по другому - описывает связь многие-ко-многим). При запросе на поиск происходит сравнение через like в первой таблице и выбор ссылок из второй, а результаты выборки сортируются по количеству упоминаний этого слова в этом материале через count() и group by. Т. ч. вверху будут страницы, где искомое слово встречается чаще. Что же касается "частичного включения" а также окончаний прилагательных и существительных русского языка, чтобы на запрос синий выдавался ответ и с синяя, и синие, и т.д. то здесь надо использовать рег.выражения. Ну и обновление этих таблиц лучше делать скриптом на cron'е - чтоб всегда были актуальны.
|
|
|
|
|
|
Страница 1 из 1 [ Сообщений: 12 ] |
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
|
|