Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#24 used as offset, casting to integer (24) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#27 used as offset, casting to integer (27) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Что делать с поиском форума? [3]
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (9): « 1 2 [3] 4 5 6 7 8 9 »   

> Описание: Обсуждение механизма поиска новой версии форума
Alone
Отправлено: 30 Января, 2007 - 03:38:51
Post Id



Super Member


Покинул форум
Сообщений всего: 2393
Дата рег-ции: Дек. 2004  

Карма 8




Не, ну форумов дофига, это нужно в каждый входить... не удобно. А так было бы удобно.
 
 Top
Гость
Отправлено: 02 Февраля, 2007 - 09:34:21
Post Id


УДАЛЁН









Tvoyweb, большая просьба как пользователя и администратора форума ExBB FM 0.1.5- чтобы обязательно была возможность:
1. Показывать результаты как: Сообщения или Темы
2. Поиск и по ключевым словам и по пользователям форума (все темы или высказывания конкретного пользователя)
3. Быстрый и точный поиск.
- Есть форумы - где нажав искать "слово" - не часто употребителяемое - можно идти кушать и спать - все равно быстро не найдет. проснешься ну тогда посмотришь нашло или нет.
вот пример на мой взгляд удобного более менее удобного поиска форума phpBB - хочется чтобы поиск был не хуже, а лучше
http://bit.pirit.info/forum/search.php

*не сочти за рекламу*
 
 Top
cosc
Отправлено: 02 Февраля, 2007 - 10:28:08
Post Id



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)

 
 Top
TvoyWeb Администратор
Отправлено: 03 Февраля, 2007 - 01:08:00
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




Alexus
Я понимаю что все хотят точный и быстрый поиск! НО не забывайте что форум на файлах. Если к примеру на этом форуме 4508 тем - это означает что во время поиска нужно было бы открыть все эти файлы, преобразовать строку из файла в массив и потом в цикле пройтись по всем постам. А при 4508 тем постов на форуме 50642. То есть нужно в циклах сделать 50642 итераций и не просто пройтись в цикле а еще и применить RegExp'ы. В итоге время работы скрипта будет очееееееень большим.
В Мускуле все проще паренной репы. Задал полю по которому будет осуществляться поиск и все, ну увеличится размер базы немного, ничего страшного.
А здесь нужно отдельно создать базу индексов и чем меньше будет база тем быстрее будет поиск. То есть при создании индексов нужно минимизировать текст в индексе. Я уже удалил все смайлы, цитаты, код теги форума и всякую ерунду из индекса. Но не стал пока удалять повторяющиеся слова. При таком индеске поиск по всему форуму занимает от одной до трех секунд и этоне есть гуд.
К вопросу о поиске в конкретном сообщении - это вообще абсурд, так как тогда создание базы индексов не имеет смысла. Мы опять возвращаемся к перебору всех сообщений форума.

На сегодняшний день у меня только одна мысль по поводу нового поиска.
1. Создание индексов с вырезкой всего ненужно и дублей слов.
2. Поиск только по разделам форума (фильтр по названиям есть в каждом разделе форума)
3. На странице результатов поиска, ссылки будут идти на версию для печати в которой будут выводиться только сообщения с найденными словами и в каждом постебудет ссылка на обычную версию сообщения.
4. На странице поиска будет выводиться выпадающий список с разделами форума, который позволит повторить тот же поиск в другом разделе форума.

ИМХО на сегодня это будет самый точный поиск по форуму.
 
 Top
cosc
Отправлено: 03 Февраля, 2007 - 03:44:23
Post Id



Full Member


Покинул форум
Сообщений всего: 188
Дата рег-ции: Апр. 2006  

Карма 2




TvoyWeb пишет:
То есть нужно в циклах сделать 50642 итераций и не просто пройтись в цикле а еще и применить RegExp'ы.

Вот тут и есть плюс сортировки: тогда база поиска будет разбита на 33+10 (33 буквы в русском алфавите + 10 цифр, латинский алфавит редко используется, можно его не учитывать) частей, и искать придется не по всей базе а только по 1 части каждое слово поиска. То бишь ускорение поиска в 40 раз.

(Отредактировано автором: 03 Февраля, 2007 - 03:50:30)

 
 Top
Xvost
Отправлено: 03 Февраля, 2007 - 19:29:53
Post Id



Newbie


Покинул форум
Сообщений всего: 47
Дата рег-ции: Дек. 2006  
Откуда: Краматорск, Дружковка, Украина

Карма 0




TvoyWeb пишет:
Аууу что кроме Alone и Ray Wen никому это больше не нужно?!!
Ну, выскажусь и я. Я на таком хостинге сижу... вот, короче, адрес: http://www.postvorskla.h17.ru/. Индексация на энтом хостинге не пашет, это на этом форуме где-то обсуждалось. Я всё заливаю на локалку, индексирую, потом заливаю на сервер. Путь тернистый, геморройный и потому неприкольный. Можно ли решить эту проблему?
 
 Top
Ray Wen Администратор
Отправлено: 04 Февраля, 2007 - 00:58:04
Post Id



Собиратель шишек...


Покинул форум
Сообщений всего: 2602
Дата рег-ции: Янв. 2005  
Откуда: Волгоград

Карма 21




Xvost
Если там пашет настройка PHP, то тебе надо расширить memory_limit мегов до 16...
 
 Top
TvoyWeb Администратор
Отправлено: 04 Февраля, 2007 - 01:52:14
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




cosc
Я не совсем понимаю тебя. В каком виде будут храниться индексы в базе?
Можешь начеркать структуру базы индексов?
 
 Top
cosc
Отправлено: 04 Февраля, 2007 - 05:27:09
Post Id



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)

 
 Top
Xvost
Отправлено: 04 Февраля, 2007 - 15:38:43
Post Id



Newbie


Покинул форум
Сообщений всего: 47
Дата рег-ции: Дек. 2006  
Откуда: Краматорск, Дружковка, Украина

Карма 0




Ray Wen пишет:
Xvost
Если там пашет настройка PHP, то тебе надо расширить memory_limit мегов до 16...
А по-подробнее можно?
 
 Top
Страниц (9): « 1 2 [3] 4 5 6 7 8 9 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0)
« ExBB Full Mods »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0378]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33