Описание: Обсуждение механизма поиска новой версии форума |
Поиск в теме | Версия для печати |
Гость |
Отправлено: 02 Февраля, 2007 - 09:34:21
|
УДАЛЁН
|
Tvoyweb, большая просьба как пользователя и администратора форума ExBB FM 0.1.5- чтобы обязательно была возможность:
1. Показывать результаты как: Сообщения или Темы
2. Поиск и по ключевым словам и по пользователям форума (все темы или высказывания конкретного пользователя)
3. Быстрый и точный поиск.
- Есть форумы - где нажав искать "слово" - не часто употребителяемое - можно идти кушать и спать - все равно быстро не найдет. проснешься ну тогда посмотришь нашло или нет.
вот пример на мой взгляд удобного более менее удобного поиска форума phpBB - хочется чтобы поиск был не хуже, а лучше
http://bit.pirit.info/forum/search.php
*не сочти за рекламу* |
|
|
cosc |
Отправлено: 02 Февраля, 2007 - 10:28:08
|
Full Member
Покинул форум
Сообщений всего: 188
Дата рег-ции: Апр. 2006
Карма 2
|
Только сейчас заметил эту тему, а тема конечно интересная....
Идея Твойвеб насчет поиска неплохая, только наверно кое-что надо улучшить.
1. Надо наверно сделать при поиске, что бы если найдено всего 1 совпадение а запросом на всю тему, то ссылка вела именно на это сообщение, так будет проще. Если я правильно понял, то такое в этот поиск не позволяет. Тогда для реализации этого можно сделать что бы запускался сразу поиск в этой теме по вхождению этого слова в скрытом режиме. Конечно это несколько увеличит время поиска, и поэтому это наверно стоит сделать в виде подключаемого мода.
2. Лучше наверно сделать все-таки дополнительную базу индекса для заголовков тем, и опцию искать только по заголовкам тем. Эта дополнительная база будет совсем небольшой, и на больших форумах поиск по заголовкам темам думаю даст куда большое быстродействие.
3. Насчет целесообразности вырезки слов меньше 3 символов - вызывает сомнения, часто бывает, что надо найти фразу именно с такими короткими словами и когда они вырезаны получается не совсем удобно. Например надо найти типа мод для Tournament, и если вырезать короткие слова, то поиск выдаст только по слову Tournament, и для большого форума может быть слишком много лишнего.
4. Еще появилась такая идея: при индексации для ускорения поиска можно сделать сортировку по первой букве слова. При этом проиндексированный файл будет состоят из кучи строк, где в начале слово, а затем через какой-нить символ две цифры: номер темы и номер поста. Такое можно сделать для каждого форума, и разбить в зависимости от алфавита на несколько файлов и т. д. И в дальнейшем при поиске какого-то слова перебирать не всю базу, а только ту часть, где слова начинаются с той же буквы, что и введенное слово. Думаю такая схема может дать ощутимое ускорение поиска. В принципе, да же можно такую сортировку проводить в масштабах всего форума, при этом рядом с каждым словом будет не 2 а 3 цифры, где 3 - номер форума. Тогда сортировку можно сделать уже по первым 2 буквам и соответственно поиск конкретного слова будет почти мгновенным. Не знаю как сделать для слов, которые встречаются в ряде постов, может просто написать слова и рядом через какие-то разделяющие символы 2(тройки) цифр, указывающие на принадлежность слова к конктретным постам. Думаю что реализация такого будет не слишком сложной и соответственно не глючной.
Минус в том, что так нельзя искать целиком фразы. Хотя с другой стороны, не знаю как это будет все сказываться на быстродействии, но можно сначала искать на совпадение всех слов из фразы и отбирать те посты, где встретились все слова из этой фразы.
В дальнейшем взять этот пост из файла темы (не из индекса) и проверить, действительно ли все эти слова есть вместе.
Насчет конкретной реализации последнего, можно сделать функцию, которая будет возвращать в виде массива список постов, где встретилось это слово. Если надо найти целиком фразу, то возвращается массив для каждого слова из этой фразы, и потом составляется из всего этого 1 массив, состоящий из тех элементов, которые есть во всех этих массивов, и на основе этого последнего массива происходит уже поиск по этим постам.
(Добавление)
Пожалуй и еще 1 минусом этой схемы является несколько большее время добавления новых постов в базу или редактирование старых. Тут придется изменить не 1 файл, а несколько, из этой базы. Естественно из постов сначала вырезается все ненужное, типа смайлов, цитат и прочее. В дальнейшем при удалении поста сначала находятся изменяемые слова и удаляются, а потом добавляются новые в соответсвующую часть базы. Для ускорения поцесса тогда можно делать сортировку скажем не в масштабах всего форума, а только по отдельным подфорумам (что и замедлит время поиска). В таком случае надо будет менять меньше файлов меньшего размера. Но тут наверно надо найти определнный компромисс между скоростью поиска и временем добавления постов. А время первоначальной сортировки наверно приципиального значения иметь не будет.
В этом случае размер базы, думаю будет несколько больше, чем по схеме твойвеба, но скорость поиска будет значительно больше. Так же размер базы значительно увеличат короткие слова.(Отредактировано автором: 02 Февраля, 2007 - 11:48:20) |
|
|
Xvost |
Отправлено: 03 Февраля, 2007 - 19:29:53
|
Newbie
Покинул форум
Сообщений всего: 47
Дата рег-ции: Дек. 2006
Откуда: Краматорск, Дружковка, Украина
Карма 0
|
TvoyWeb пишет:Аууу что кроме Alone и Ray Wen никому это больше не нужно?!! Ну, выскажусь и я. Я на таком хостинге сижу... вот, короче, адрес: http://www.postvorskla.h17.ru/. Индексация на энтом хостинге не пашет, это на этом форуме где-то обсуждалось. Я всё заливаю на локалку, индексирую, потом заливаю на сервер. Путь тернистый, геморройный и потому неприкольный. Можно ли решить эту проблему? |
|
|
cosc |
Отправлено: 04 Февраля, 2007 - 05:27:09
|
Full Member
Покинул форум
Сообщений всего: 188
Дата рег-ции: Апр. 2006
Карма 2
|
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 букве для ускорения поиска данного слова.(Отредактировано автором: 04 Февраля, 2007 - 05:29:32) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (9): « 1 2 [3] 4 5 6 7 8 9 » |
Сейчас эту тему просматривают: 3 (гостей: 3, зарегистрированных: 0, скрытых: 0) |
« ExBB Full Mods » |
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
|
|
|