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

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

Strict Standards: Resource ID#39 used as offset, casting to integer (39) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Что делать с поиском форума? [3]
ТвойWeb » » ExBB Full Mods » Что делать с поиском форума?

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

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

*не сочти за рекламу*
23. cosc - 02 Февраля, 2007 - 10:28:08 - перейти к сообщению
Только сейчас заметил эту тему, а тема конечно интересная....
Идея Твойвеб насчет поиска неплохая, только наверно кое-что надо улучшить.
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. На странице поиска будет выводиться выпадающий список с разделами форума, который позволит повторить тот же поиск в другом разделе форума.

ИМХО на сегодня это будет самый точный поиск по форуму.
25. cosc - 03 Февраля, 2007 - 03:44:23 - перейти к сообщению
TvoyWeb пишет:
То есть нужно в циклах сделать 50642 итераций и не просто пройтись в цикле а еще и применить RegExp'ы.

Вот тут и есть плюс сортировки: тогда база поиска будет разбита на 33+10 (33 буквы в русском алфавите + 10 цифр, латинский алфавит редко используется, можно его не учитывать) частей, и искать придется не по всей базе а только по 1 части каждое слово поиска. То бишь ускорение поиска в 40 раз.
26. Xvost - 03 Февраля, 2007 - 19:29:53 - перейти к сообщению
TvoyWeb пишет:
Аууу что кроме Alone и Ray Wen никому это больше не нужно?!!
Ну, выскажусь и я. Я на таком хостинге сижу... вот, короче, адрес: http://www.postvorskla.h17.ru/. Индексация на энтом хостинге не пашет, это на этом форуме где-то обсуждалось. Я всё заливаю на локалку, индексирую, потом заливаю на сервер. Путь тернистый, геморройный и потому неприкольный. Можно ли решить эту проблему?
27. Ray Wen - 04 Февраля, 2007 - 00:58:04 - перейти к сообщению
Xvost
Если там пашет настройка 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...
А по-подробнее можно?

Форум на AlfaSpace.NET


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

[Script Execution time: 0.0414]     [ 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