21. Alone - 30 Января, 2007 - 03:38:51 - перейти к сообщению
Не, ну форумов дофига, это нужно в каждый входить... не удобно. А так было бы удобно.
22. Гость - 02 Февраля, 2007 - 09:34:21 - перейти к сообщению
Tvoyweb, большая просьба как пользователя и администратора форума ExBB FM 0.1.5- чтобы обязательно была возможность:
1. Показывать результаты как: Сообщения или Темы
2. Поиск и по ключевым словам и по пользователям форума (все темы или высказывания конкретного пользователя)
3. Быстрый и точный поиск.
- Есть форумы - где нажав искать "слово" - не часто употребителяемое - можно идти кушать и спать - все равно быстро не найдет. проснешься ну тогда посмотришь нашло или нет.
вот пример на мой взгляд удобного более менее удобного поиска форума phpBB - хочется чтобы поиск был не хуже, а лучше
http://bit.pirit.info/forum/search.php
*не сочти за рекламу*
1. Показывать результаты как: Сообщения или Темы
2. Поиск и по ключевым словам и по пользователям форума (все темы или высказывания конкретного пользователя)
3. Быстрый и точный поиск.
- Есть форумы - где нажав искать "слово" - не часто употребителяемое - можно идти кушать и спать - все равно быстро не найдет. проснешься ну тогда посмотришь нашло или нет.
вот пример на мой взгляд удобного более менее удобного поиска форума phpBB - хочется чтобы поиск был не хуже, а лучше
http://bit.pirit.info/forum/search.php
*не сочти за рекламу*
23. cosc - 02 Февраля, 2007 - 10:28:08 - перейти к сообщению
Только сейчас заметил эту тему, а тема конечно интересная....
Идея Твойвеб насчет поиска неплохая, только наверно кое-что надо улучшить.
1. Надо наверно сделать при поиске, что бы если найдено всего 1 совпадение а запросом на всю тему, то ссылка вела именно на это сообщение, так будет проще. Если я правильно понял, то такое в этот поиск не позволяет. Тогда для реализации этого можно сделать что бы запускался сразу поиск в этой теме по вхождению этого слова в скрытом режиме. Конечно это несколько увеличит время поиска, и поэтому это наверно стоит сделать в виде подключаемого мода.
2. Лучше наверно сделать все-таки дополнительную базу индекса для заголовков тем, и опцию искать только по заголовкам тем. Эта дополнительная база будет совсем небольшой, и на больших форумах поиск по заголовкам темам думаю даст куда большое быстродействие.
3. Насчет целесообразности вырезки слов меньше 3 символов - вызывает сомнения, часто бывает, что надо найти фразу именно с такими короткими словами и когда они вырезаны получается не совсем удобно. Например надо найти типа мод для Tournament, и если вырезать короткие слова, то поиск выдаст только по слову Tournament, и для большого форума может быть слишком много лишнего.
4. Еще появилась такая идея: при индексации для ускорения поиска можно сделать сортировку по первой букве слова. При этом проиндексированный файл будет состоят из кучи строк, где в начале слово, а затем через какой-нить символ две цифры: номер темы и номер поста. Такое можно сделать для каждого форума, и разбить в зависимости от алфавита на несколько файлов и т. д. И в дальнейшем при поиске какого-то слова перебирать не всю базу, а только ту часть, где слова начинаются с той же буквы, что и введенное слово. Думаю такая схема может дать ощутимое ускорение поиска. В принципе, да же можно такую сортировку проводить в масштабах всего форума, при этом рядом с каждым словом будет не 2 а 3 цифры, где 3 - номер форума. Тогда сортировку можно сделать уже по первым 2 буквам и соответственно поиск конкретного слова будет почти мгновенным. Не знаю как сделать для слов, которые встречаются в ряде постов, может просто написать слова и рядом через какие-то разделяющие символы 2(тройки) цифр, указывающие на принадлежность слова к конктретным постам. Думаю что реализация такого будет не слишком сложной и соответственно не глючной.
Минус в том, что так нельзя искать целиком фразы. Хотя с другой стороны, не знаю как это будет все сказываться на быстродействии, но можно сначала искать на совпадение всех слов из фразы и отбирать те посты, где встретились все слова из этой фразы.
В дальнейшем взять этот пост из файла темы (не из индекса) и проверить, действительно ли все эти слова есть вместе.
Насчет конкретной реализации последнего, можно сделать функцию, которая будет возвращать в виде массива список постов, где встретилось это слово. Если надо найти целиком фразу, то возвращается массив для каждого слова из этой фразы, и потом составляется из всего этого 1 массив, состоящий из тех элементов, которые есть во всех этих массивов, и на основе этого последнего массива происходит уже поиск по этим постам.
(Добавление)
Пожалуй и еще 1 минусом этой схемы является несколько большее время добавления новых постов в базу или редактирование старых. Тут придется изменить не 1 файл, а несколько, из этой базы. Естественно из постов сначала вырезается все ненужное, типа смайлов, цитат и прочее. В дальнейшем при удалении поста сначала находятся изменяемые слова и удаляются, а потом добавляются новые в соответсвующую часть базы. Для ускорения поцесса тогда можно делать сортировку скажем не в масштабах всего форума, а только по отдельным подфорумам (что и замедлит время поиска). В таком случае надо будет менять меньше файлов меньшего размера. Но тут наверно надо найти определнный компромисс между скоростью поиска и временем добавления постов. А время первоначальной сортировки наверно приципиального значения иметь не будет.
В этом случае размер базы, думаю будет несколько больше, чем по схеме твойвеба, но скорость поиска будет значительно больше. Так же размер базы значительно увеличат короткие слова.
Идея Твойвеб насчет поиска неплохая, только наверно кое-что надо улучшить.
1. Надо наверно сделать при поиске, что бы если найдено всего 1 совпадение а запросом на всю тему, то ссылка вела именно на это сообщение, так будет проще. Если я правильно понял, то такое в этот поиск не позволяет. Тогда для реализации этого можно сделать что бы запускался сразу поиск в этой теме по вхождению этого слова в скрытом режиме. Конечно это несколько увеличит время поиска, и поэтому это наверно стоит сделать в виде подключаемого мода.
2. Лучше наверно сделать все-таки дополнительную базу индекса для заголовков тем, и опцию искать только по заголовкам тем. Эта дополнительная база будет совсем небольшой, и на больших форумах поиск по заголовкам темам думаю даст куда большое быстродействие.
3. Насчет целесообразности вырезки слов меньше 3 символов - вызывает сомнения, часто бывает, что надо найти фразу именно с такими короткими словами и когда они вырезаны получается не совсем удобно. Например надо найти типа мод для Tournament, и если вырезать короткие слова, то поиск выдаст только по слову Tournament, и для большого форума может быть слишком много лишнего.
4. Еще появилась такая идея: при индексации для ускорения поиска можно сделать сортировку по первой букве слова. При этом проиндексированный файл будет состоят из кучи строк, где в начале слово, а затем через какой-нить символ две цифры: номер темы и номер поста. Такое можно сделать для каждого форума, и разбить в зависимости от алфавита на несколько файлов и т. д. И в дальнейшем при поиске какого-то слова перебирать не всю базу, а только ту часть, где слова начинаются с той же буквы, что и введенное слово. Думаю такая схема может дать ощутимое ускорение поиска. В принципе, да же можно такую сортировку проводить в масштабах всего форума, при этом рядом с каждым словом будет не 2 а 3 цифры, где 3 - номер форума. Тогда сортировку можно сделать уже по первым 2 буквам и соответственно поиск конкретного слова будет почти мгновенным. Не знаю как сделать для слов, которые встречаются в ряде постов, может просто написать слова и рядом через какие-то разделяющие символы 2(тройки) цифр, указывающие на принадлежность слова к конктретным постам. Думаю что реализация такого будет не слишком сложной и соответственно не глючной.
Минус в том, что так нельзя искать целиком фразы. Хотя с другой стороны, не знаю как это будет все сказываться на быстродействии, но можно сначала искать на совпадение всех слов из фразы и отбирать те посты, где встретились все слова из этой фразы.
В дальнейшем взять этот пост из файла темы (не из индекса) и проверить, действительно ли все эти слова есть вместе.
Насчет конкретной реализации последнего, можно сделать функцию, которая будет возвращать в виде массива список постов, где встретилось это слово. Если надо найти целиком фразу, то возвращается массив для каждого слова из этой фразы, и потом составляется из всего этого 1 массив, состоящий из тех элементов, которые есть во всех этих массивов, и на основе этого последнего массива происходит уже поиск по этим постам.
(Добавление)
Пожалуй и еще 1 минусом этой схемы является несколько большее время добавления новых постов в базу или редактирование старых. Тут придется изменить не 1 файл, а несколько, из этой базы. Естественно из постов сначала вырезается все ненужное, типа смайлов, цитат и прочее. В дальнейшем при удалении поста сначала находятся изменяемые слова и удаляются, а потом добавляются новые в соответсвующую часть базы. Для ускорения поцесса тогда можно делать сортировку скажем не в масштабах всего форума, а только по отдельным подфорумам (что и замедлит время поиска). В таком случае надо будет менять меньше файлов меньшего размера. Но тут наверно надо найти определнный компромисс между скоростью поиска и временем добавления постов. А время первоначальной сортировки наверно приципиального значения иметь не будет.
В этом случае размер базы, думаю будет несколько больше, чем по схеме твойвеба, но скорость поиска будет значительно больше. Так же размер базы значительно увеличат короткие слова.
24. TvoyWeb - 03 Февраля, 2007 - 01:08:00 - перейти к сообщению
Alexus
Я понимаю что все хотят точный и быстрый поиск! НО не забывайте что форум на файлах. Если к примеру на этом форуме 4508 тем - это означает что во время поиска нужно было бы открыть все эти файлы, преобразовать строку из файла в массив и потом в цикле пройтись по всем постам. А при 4508 тем постов на форуме 50642. То есть нужно в циклах сделать 50642 итераций и не просто пройтись в цикле а еще и применить RegExp'ы. В итоге время работы скрипта будет очееееееень большим.
В Мускуле все проще паренной репы. Задал полю по которому будет осуществляться поиск и все, ну увеличится размер базы немного, ничего страшного.
А здесь нужно отдельно создать базу индексов и чем меньше будет база тем быстрее будет поиск. То есть при создании индексов нужно минимизировать текст в индексе. Я уже удалил все смайлы, цитаты, код теги форума и всякую ерунду из индекса. Но не стал пока удалять повторяющиеся слова. При таком индеске поиск по всему форуму занимает от одной до трех секунд и этоне есть гуд.
К вопросу о поиске в конкретном сообщении - это вообще абсурд, так как тогда создание базы индексов не имеет смысла. Мы опять возвращаемся к перебору всех сообщений форума.
На сегодняшний день у меня только одна мысль по поводу нового поиска.
1. Создание индексов с вырезкой всего ненужно и дублей слов.
2. Поиск только по разделам форума (фильтр по названиям есть в каждом разделе форума)
3. На странице результатов поиска, ссылки будут идти на версию для печати в которой будут выводиться только сообщения с найденными словами и в каждом постебудет ссылка на обычную версию сообщения.
4. На странице поиска будет выводиться выпадающий список с разделами форума, который позволит повторить тот же поиск в другом разделе форума.
ИМХО на сегодня это будет самый точный поиск по форуму.
Я понимаю что все хотят точный и быстрый поиск! НО не забывайте что форум на файлах. Если к примеру на этом форуме 4508 тем - это означает что во время поиска нужно было бы открыть все эти файлы, преобразовать строку из файла в массив и потом в цикле пройтись по всем постам. А при 4508 тем постов на форуме 50642. То есть нужно в циклах сделать 50642 итераций и не просто пройтись в цикле а еще и применить RegExp'ы. В итоге время работы скрипта будет очееееееень большим.
В Мускуле все проще паренной репы. Задал полю по которому будет осуществляться поиск и все, ну увеличится размер базы немного, ничего страшного.
А здесь нужно отдельно создать базу индексов и чем меньше будет база тем быстрее будет поиск. То есть при создании индексов нужно минимизировать текст в индексе. Я уже удалил все смайлы, цитаты, код теги форума и всякую ерунду из индекса. Но не стал пока удалять повторяющиеся слова. При таком индеске поиск по всему форуму занимает от одной до трех секунд и этоне есть гуд.
К вопросу о поиске в конкретном сообщении - это вообще абсурд, так как тогда создание базы индексов не имеет смысла. Мы опять возвращаемся к перебору всех сообщений форума.
На сегодняшний день у меня только одна мысль по поводу нового поиска.
1. Создание индексов с вырезкой всего ненужно и дублей слов.
2. Поиск только по разделам форума (фильтр по названиям есть в каждом разделе форума)
3. На странице результатов поиска, ссылки будут идти на версию для печати в которой будут выводиться только сообщения с найденными словами и в каждом постебудет ссылка на обычную версию сообщения.
4. На странице поиска будет выводиться выпадающий список с разделами форума, который позволит повторить тот же поиск в другом разделе форума.
ИМХО на сегодня это будет самый точный поиск по форуму.
25. cosc - 03 Февраля, 2007 - 03:44:23 - перейти к сообщению
TvoyWeb пишет:
То есть нужно в циклах сделать 50642 итераций и не просто пройтись в цикле а еще и применить RegExp'ы.
Вот тут и есть плюс сортировки: тогда база поиска будет разбита на 33+10 (33 буквы в русском алфавите + 10 цифр, латинский алфавит редко используется, можно его не учитывать) частей, и искать придется не по всей базе а только по 1 части каждое слово поиска. То бишь ускорение поиска в 40 раз.
26. Xvost - 03 Февраля, 2007 - 19:29:53 - перейти к сообщению
TvoyWeb пишет:
Ну, выскажусь и я. Я на таком хостинге сижу... вот, короче, адрес: http://www.postvorskla.h17.ru/. Индексация на энтом хостинге не пашет, это на этом форуме где-то обсуждалось. Я всё заливаю на локалку, индексирую, потом заливаю на сервер. Путь тернистый, геморройный и потому неприкольный. Можно ли решить эту проблему?
Аууу что кроме Alone и Ray Wen никому это больше не нужно?!!
27. Ray Wen - 04 Февраля, 2007 - 00:58:04 - перейти к сообщению
Xvost
Если там пашет настройка PHP, то тебе надо расширить memory_limit мегов до 16...
Если там пашет настройка PHP, то тебе надо расширить memory_limit мегов до 16...
28. TvoyWeb - 04 Февраля, 2007 - 01:52:14 - перейти к сообщению
cosc
Я не совсем понимаю тебя. В каком виде будут храниться индексы в базе?
Можешь начеркать структуру базы индексов?
Я не совсем понимаю тебя. В каком виде будут храниться индексы в базе?
Можешь начеркать структуру базы индексов?
29. cosc - 04 Февраля, 2007 - 05:27:09 - перейти к сообщению
TvoyWeb пишет:
Можешь начеркать структуру базы индексов?
Поиск как я понимаю надо осуществлять по словам, то есть брать слово из поискового запроса и проверять, есть ли такое слово в тексте постов. Но поиск такого слова будет происходить по ВСЕМУ объему текста, что и занимает длительное время. И потому куда лучше всю базу индексов разбить на части и производить поиск только в той части, где искомое слово есть точно.
А весь текст в котором производится поиск состоит из слов, и следовательно можно эти слова отсортировать по алфавиту.
То есть база индексов в этом случае будет состоят из отдельных файлов: А.php, Б.php и т. д.
Каждый файл будет в следующем виде:
{файл А.txt:
{абрикос{1:2}}
арбуз{3:4}
ананас{6:8}
....
:конец файла}
Где цифры после слова, например {1:2} означают сответственно номер темы и поста в этой теме, где находится это слово.
Таких файлов будет по числу букв русского алфавита - 33 (регистр я думаю можно не учитывать) + 10 цифр=43
В дальнейшем при поиске слова скажем ананас открываеться файл из базы индексов, начинающийся на букву А и это слово ищется в этом файле. Если слово найдено, то возвращается ссылка на эту тему и пост типа topic.php?forum=..&topic=6&v=l#8.
Это я накидал в самом общем виде базу индексов, на практике я думаю придется все несколько усложнить. Например возможно потребуется заголовочный файл для всей базы индексов и т. д.
Такая база индексов будет создана по каждому разделу, и в дальнейшем при добавлении нового поста все слова из этого поста, за исключением цитат, и пр. будет добавляться в файл базы индексов в соответствии с их первыми буквами. Например, слово квартет будет добавлено в конец файла к.php.
При редактировании поста сначал в базе индексов по отдельности будут находиться и удаляться слова из старого варианта поста, а затем добавляться слова из нового варианта поста.
Если поисковый запрос будет требовать точного соответствия какой-то фразы, то в этом случае сначала будут находиться все слова их этой фразы, а затем будут из результатов поиска отбираться только те посты, в которых есть все слова их этой фразы. Думаю что таких постов будет не так уж и много. И под конец будет браться этот пост из самой базы форума и будет проверяться, есть ли в нем эта фраза. Думаю, что так как постов будет отобрано не так уж и много, это не займет много времени.
(Добавление)
Честно говоря, на практике я подобную схему еще не разу не проверял, но мне кажеться, что главным минусом будет значительное время удаления постов, а особенно тем. Для устранения этого недостатка, можно наверно:
1. Для больших разделов атоматически разбить базу индексов на несколько по каким-либо признакам.
2. При удалении темы может проще заново перестроить базу индексов для всего раздела.
3. Сделать сортировку не только по первой букве слова, но и по 2 букве для ускорения поиска данного слова.
30. Xvost - 04 Февраля, 2007 - 15:38:43 - перейти к сообщению
Ray Wen пишет:
А по-подробнее можно?
Xvost
Если там пашет настройка PHP, то тебе надо расширить memory_limit мегов до 16...
Если там пашет настройка PHP, то тебе надо расширить memory_limit мегов до 16...