Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
rim

Как сформировать запрос?

01.01.2008, 15:28. Показов 1607. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть таблица с полями:
id, doc_id, text

Эта таблица содержит контент документов сайта, проиндексированных для поиска. Так как максимальный размер текстового поля в Access равен 255, то пришлось разбивать содержимое документа на несолько частей. Doc_id - это id документа из списка документов.
Поле doc_id может иметь несколько одинаковых значений.
Поисковая фраза разбивается на слова и представляется в виде like-конструкций.
Как можно ли построить запрос, чтобы в результате получился набор записей, в которых входят doc_id только тех документов, в которых искомая фраза, а точнее набор слов встречается в полном составе.

Пожалуста, подскажите хотя бы в каком направлении надо идти
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.01.2008, 15:28
Ответы с готовыми решениями:

Как сформировать запрос?
Имеются две таблицы. Первая таблица tbl1 id tbl1_Year tbl1_Quarter tbl1_index 1 2006 1 25,5 2 ...

Как сформировать запрос
Есть база по запчастям вида "артикул - цена". Как сделать запрос, чтобы в нём отправлять массив артикулов, а получать массив цен.

Как сформировать запрос для даты
UPDATE auth_user SET is_active = '0' WHERE ('%s')-(last_login)<=5 Нужно что бы если разница между текущей датой и датой в бд больше 5...

10
YURA
02.01.2008, 08:23
А почему бы и нет...
Если допустить, что искомая фраза не превышает 255 символов(но лучше, чтобы она была гораздо меньше, все зависит от максимальной возможной длины слов в искомой фразе) и она есть в документе, то есть 2 варианта:
1) Она полностью содержится в одном из кусков
2) Она содержится на границе двух различных кусков

Т.е. на вскидку:
select distinct doc_id
from [таблица] as a left join [таблица] as b on
a.doc_id=b.doc_id and a_id<>b.id
where
a.text & iif(isnull(b.text),'',b.text) like '*Фраза*'
msd
02.01.2008, 10:33
Кстати, что мешает использовать MEMO вместо TEXT? Если тексты не превышают 64К каждый, их не надо будет разбивать и поиск упростится.
rim
03.01.2008, 21:41
MEMO не индексируется, и поиск по нему не возможен (средствами SQL), хотя есть вариант, который по идее и надо было бы использовать, это хранимые процедуры, но их я еще ни разу не писал, но собираюсь все же попробовать.
0 / 0 / 0
Регистрация: 31.03.2007
Сообщений: 59
04.01.2008, 13:42
Я лично никогда не занимался полнотекстовым поиском, но по моему здесь в корне неверный подход. Хранить в БД надо слова и их веса (частоту попадания) в html файлах. При чем желательно исключить всякие а,не,в и т.п не несущие информации слова. А запихивать контент в БД смысла нет (если только в СУБД не подерживается полнотекстовый поиск), тем более строить по нему индекс - он практически никогда не будет использоваться, а вот база будет расти как минимум в два раза быстрее.
0
rim
04.01.2008, 13:58
Я сам хотел сделать нормальную систему, с индексацией, но для этого мне понадобились бы хранимые процедуры, к которым я не знаю подхода, никогда не использовал. А без них про эффективную работу индексатора можно забыть. Я сделал быстренько, чтоб показать клиенту, да поиск есть (по сайту). Ну а там я напишу все как полагается. Хотя мысль, о том, что писать это все на Access, меня пугает
0 / 0 / 0
Регистрация: 31.03.2007
Сообщений: 59
04.01.2008, 15:04
Если пользуешься MS платформой то бояться нечего.
Просто будеш пользоваться mdb базой как местом хранения.
Хранимые процедуры не нужны задача выборки не очень сложная-- хп заменит гроздь запросов сохраненная в mdb файле.
А вот задача индексации ляжет на плечи твоего приложения (asp?).
0
rim
04.01.2008, 15:43
ну, срипт, занимающийся индексацией - это не совсем то, как мне кажется. Попробую припахать IndexServer, он для этого и создавался
msd
06.01.2008, 10:45
МЕМО не индексируется, но искать по нему при помощи SQL можно!
Например, надо найти вхождение фразы 'найти слово'. Пишем запрос:

Select * from Table where memoField like '*найти*слово*' or memoField like '*слово*найти*'

Работает 100%!
YURA
06.01.2008, 14:09
На MS Jet - да.
А при чем тогда хранимые процедуры?
rim
06.01.2008, 18:51
Хранимые процедуры - для индексации, чтобы не заваливать сервер тысячью мелких запросов, а послать все слова процедуре, и она их проверит на наличие в словаре, обработает, внесет в словарь, если его еще нет и т.д. Иначе индексация будет идти со скоростью диалапа .

Но как я уже сказал, есть возможность возложить эту работу на Index Server, только пока руки не доходят до него.
Может по МЕМО и можно искать, да только я уже написал через ТЕКСТОВОЕ.
Переделывать буду уже на что-то серьезное, с индексированием не текста документа, а слов - либо на IS, либо на ХП.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.01.2008, 18:51
Помогаю со студенческими работами здесь

Как сформировать правильный запрос (отчет)?
Вводное: например у нас есть на складе: 5 ящиков зеленого цвета с весом =5кг,, и какими то еще доп характеристиками 10 ящиков красного...

Некорректная база, как сформировать select запрос
Привет знатокам! Не силен в sql запросах может кто поможет. Дано: база данных в которой 4 таблицы. --В одной - фамилии сотрудников,...

Как правильно сформировать запрос
Добрый день! Имеется главная страница, на которой представлено меню, формируемое из базы. Надо сделать так, чтобы при нажатии на пункт меню...

Как правильно сформировать запрос к БД?
Добрый день. Пытаемся сделать модуль, но плохо знаем принципы работы с базами данных, а потому не пинать. Вот есть: $query =...

Как сформировать запрос MaskEdit
Как сформировать запрос если MaskEdit1 заполнен то......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru