Forum Webscript.Ru
Общие => Базы данных => Тема начата: Greg от 26 Февраля 2006, 11:38:12
-
ситуёвина такая:
пользователь вводит текстовый запрос в форме (поискать ченить), а информация, в которой нужно искать, лежит в базе в формате BLOB. отсюда вопрос: как заставить искать текст в BLOB?
правильно ли я понимаю, что либо запрос, либо информацию из базы нужно приводить к формату (текст или BLOB)? к какому тады?
спасибо всем заранее
-
в общем-то проблема оказалась надуманной, оказывается в BLOB можно искать без проблем и независимо от подтипа
возник новый вопрос. делаю поиск и в запросе к базе хотелось бы использовать аналоги строковых PHP-функций, однако ничего подобного не нашел в SQL. Единственным выходом сейчас вижу такой: вытаскивать каждую запись, обрабатывать её как строку средствами PHP, а не SQL
может кто подскажет другие варианты? Всем спасибо!
-
В MySQL есть (http://dev.mysql.com/doc/refman/5.0/en/functions.html) всякие функции.
В большинстве случаев проблема „подобных функций“ решается правильным проектированием базы. Может, стоит задуматься?
-
hanslinger
действительно, подумываю об этом. к сожалению материалов по тому как строятся базы индекса для поиска я не нашёл. Может подскажешь чем?
дошел лишь до того, что в таблице содержаться ИД, путь к документу, заголовок и "чистый" текст документ (весь сайт на шаблонах, поэтому смысла в поиске меню и пр. нет смысла)... вот поиск и осуществляется в заголовке и тексте документа, дальше... дальше пока ничего - размышляю
-
Greg
опиши задачу... нормально...
что у тебя есть?
Id документа, путь, заголовок и текст ?
поиск нужно организовать по каким полям? нужно ли пользовать словоформы и прочее...
-
commander
поля: ид, путь, заголовок-title, текст документа (основной текст без шапок, меню и т.п. - с тегами)
поиск нужно организовать по заголовку и тексту документа
хочу сделать пока простой поиск без словоформ, но потом его модернизировать потихоньку
мои мысли таковы:
1. найти максимальное количество совпадений искомой строки в заголовке и тексте документа (причем заголовку отдать большее предпочтение)
2. вывести результаты по убыванию
честно говоря, поиском по тексту ранее почти не занимался (исключая просто поиск слова или строки в тексте). сформулировать свои мысли толком не могу... ибо мало их!
Модераторам: может передем в алгоритмы?
-
Greg
на сколько серьездный поиск ты собираешся реализовывать?
т.е.
1. нужно ли строить спинеты (части текста где встречаеться искомое слово)?
2. какой объем данных по которым нужно провести поиск?
короче выложи полную инфу что есть и что надо... иначе сложно что-то подсказать по этому поводу...
-
commander
1.на данный момент поиск осуществляется по нескольким сотням записей в базе (та информация, что храниться конкретно в базе), каждую неделю, на тысячу увеличивается, т.е. рассчитывать нужно на десятки и сотни тысяч записей
2. также имеются несколько сотен статичных документов, которые индексируются (как - описал выше)
собственно получается так, что в поиск нужно осуществлять по заголовку и тексту документа (разные таблицы построены по разному, но в принципе очень похожи).
хотелось бы на первоначальном этапе искать так:
1. совпадение фразы полностью в заголовке и документе
2. совпадени фразы в заголовке
3. совпадени фразы в тексте
4. совпадение нескольких слов фразы в заголовке и/или тексте
5. совпадение одного слова в заголовке и/или тексте
простой поиск слов поисковой фразы в тексте и заголовке уже реализован. однако он не удовлетворяет таким условиям, чтобы документы были хоть как-то релевантны звпросу - иногда выдается совершенно посторонние документы, особенно по общеупотребительным словам, присутствующим во фразе
нужно чтобы набрав фразу "газовые котельные" человек попал на страницу новости, которая говорит о повальном перевооружении котельных области, а не получил результат со страницами (заголовки): "газовые аттаки в ираке" и пр.
на первоначальном этапе хочу сделать простой поиск без словоформ и т.п. мудреностей, далее думаю обязательно модернизировать... т.е. нужно понять весь алгоритм: от простого к сложному
-
Greg
если будет сотни тысяч записей от БД как таковой придеться отказаться...
-
commander
каким же образом тогда искать?
-
с BLOB\'ом кстати такая фигня вышла: пусть строка и подстрока имеют символы как в верхнем, так и в нижнем регистре. чтобы искать строчку в запросе использовал такую функцию upper() (подстроку тоже переводил в верхний регистр), но с блобом она никак не хочет работать - ругается...
может есть какое-то решение?
-
Greg
каким же образом тогда искать?
пользовать файлы...
Greg
может есть какое-то решение?
ИМХО напиши сам эту функцию... сложности там нет...
-
commander
т.е. индекс держать в файле?
-
Greg
инфу держать в файле... а индексы в оперативной памяти..