Angara.Net

К вопросу о нормальном поиске

Alexandr Ivanischev / @shum38
Была вот тема на сайте, по осени, вроде. У человека угнали а/м Тойота Краун. Кто найдет эту тему при помощи поиска? Какой запрос вы бы использовали? И как реально найти эту тему.
#196018
29.03.2009 - 21:35
Максим Пензин / @maxp
#196123
30.03.2009 - 01:28
Alexandr Ivanischev / @shum38
maxp [196123]: Суть не в ссылке. Суть в запросе. Я хочу найти эту тему. Как это сделать?
#196166
30.03.2009 - 09:58
Максим Пензин / @maxp
shum38 [196166]: Тут есть некоторая проблема, так как Гугль кое-что выкидывает из индекса.
Эту тему Яндекс находит.

Собственный поиск по сайту/форуму есть в планах, но не в самых ближайших.
#196206
30.03.2009 - 11:29
Alexandr Ivanischev / @shum38
maxp [196206]: Помочь? Это ведь извращение - из базы выкидывать в html, чтобы проиндексировал гугль, чтобы обратиться к нему с запросом, чтобы потом выдать в своем же дизайне результат. При этом непонятно, проиндексировал - не проиндексировал. Дайте кусочек базы - накидаю php, а вы уж потом посмотрите, поравите, внедрите.
#196217
30.03.2009 - 11:57
Максим Пензин / @maxp
shum38 [196217]: Вы, видимо, не совсем в курсе, что такое полнотекстовый поиск по приличной базе.

Сразу хочу заметить, что просто SELECT ... LIKE ... для него не достаточно - и ищет плохо, и десяток одновременных запросов могут легко поставить диск раком.

Надо что-то, что может делать полнотекстовый индекс с учетом словоформ и других особенностей. Смотрю в этом плане на встроенный tsearch или на Sphinx, но повторюсь - это сейчас не первоочередная задача.

А Гугль всё-равно нас уже индексирует почему бы им не попользоваться.
#196266
30.03.2009 - 12:59
Alexandr Ivanischev / @shum38
maxp [196266]: А есть статистика по запросам? Сервер didicated? И что значит "диск раком" - вот про это я, действительно не в курсе.

TSearch мне понравился. Я, правда, никогда его не использовал для интенсивного полнотекстового поиска, но пробовал. То количество поисковых запросов, которое у меня было по сей день, не требовало ничего кроме sql-запросов к базе.
#196273
30.03.2009 - 13:17
John Lepikhin / @strayer
shum38 [196273]: Запросы вида ... like '%word%' или ... like '%word' невозможно проиндексировать. Это означает, что для поиска соответствий надо целиком прочитать все записи в табличке. Если табличка 50 мегабайт — ничего особо страшного, она в конечном итоге целиком ляжет кэшем в память и все тормоза будут только из-за интенсивной работы CPU. Если же табличка получится хотя бы порядка пары гигов (что для этого сайта вполне нормальная цифра), на каждый поиск табличка будет целиком читаться с диска.

Поскольку поиск по тексту имеет определённые особенности (никого не интересует поиск куска слова), в современных СУБД был добавлен специальный тип индекса fullsearch. Каждый текст разбивается на слова, создаётся псевдотаблица вида {слово, id_статьи}, строится индекс (хэш-таблица) по полю {слово}. Таким образом, можно быстро поискать статьи с определёнными словами.
Некоторые движки учитывают морфологию. В этом случае, в псевдотаблицу сохраняется не слово, как оно встречалось в тексте, а его "чистая" форма. И при поиске все искомые слова преобразуются к "чистой" форме.

У этого способа тоже есть недостатки. Встроенный в СУБД индекс не имеет никакого представления о структуре текста. Соответственно, не может учитывать вес слов, исключать не значимые куски текста, учитывать положение слов в тексте, мета-тэги и т.д. В связи с этим, поисковые движки вида Sphinx, mnogoSearch и т.д. самостоятельно эмулируют fulltext индекс, но с учётом всего вышесказанного. Этого вполне достаточно для большинства типовых поисковых задач.

Но если у вас на сайте даже всего терабайт текста, то эта технология тоже перестаёт справляться. Причина в том, что даже вот так хорошо проиндексированный текст будет содержать несколько миллиардов статей и несколько триллионов ссылок в полнотекстовом индексе. Размер таблички соответствий получится несколько терабайт. Но самое главное — учёт веса слов, значимости статьи в целом и т.д. требует очень много дополнительных ресурсов. Возникает вопрос распараллеливания поиска. Крупные поисковые машины распределяют эту большую таблицу соответствий на несколько машин. В ней хранятся лишь слова и ссылки на документы. Никакого веса и прочих данных о структуре. Каждый документ хранится _целиком_. Когда составлен список статей с нужными словами, начинается анализ полностью сохранённых в индексе документов на предмет соответствия запросу. Всё это тоже распределённо. Например, гугл утверждает, что в обработке одного запроса бывает одновременно задействовано до нескольких тысяч машин.
#196324
30.03.2009 - 14:37
Alexandr Ivanischev / @shum38
Все это понятно. :) Я знаком с огранизацией ft-индексов. Но вот про объемы, конечно, никогда не слышал. Полагаю, что база Ангары метров 400-500. Если баз делать несколько, например по годам?
#196368
30.03.2009 - 15:28
John Lepikhin / @strayer
shum38 [196368]: Что изменит разделение по годам? Вопрос не в объёме, а в функциональности. У голого fulltext она минимальна.
#196377
30.03.2009 - 16:03
Alexandr Ivanischev / @shum38
strayer [196377]: В принципе, все понятно. Но, та реализация, что есть сейчас, сильно уступает даже простому LIKE (если не брать во внимание объем базы). Я не могу выбрать параметры, которые значительно конкретизируют и уменьшат выдачу. Время, автор, раздел.
#196402
30.03.2009 - 17:11
John Lepikhin / @strayer
shum38 [196402]: ... Зато доступна вся мощь синтаксиса запросов http://www.google.com/intl/ru/help/refinesearch.html :)
Но в целом согласен, иногда возникало желание исключить из поиска форум.
#196406
30.03.2009 - 17:16
Максим Пензин / @maxp
shum38 [196273]: "диск раком" это значит, что у диска всего один тонарм, на котором стоят головки и если его попросить прочитать всю базу пять раз параллельно, то он только и будет делать, что позиционировать головки, а это самая долгая операция.
Иными словами пяток сёрчеров наживая на Ф5 смогут прогрузить тачку очень заметно.
Причем, даже взяв железяку в 4 раза мощнее и с винтом на 10к рпмов не особо-то от этого защитишься.

Понятно, что можно изобретать всякие костыли типа ограничение одновременного количества поисков или еще чего-либо в этом духе, но я сейчас не вижу смысла этим заниматься.
#196671
31.03.2009 - 02:12
Викторович / @Slav4ik
Возможно, не совсем по теме... Но вопрос к администрации:
Не могу решить, к какому разделу форума, отнести тему, о "велоакустике". Наушники - надоели, да и не безопасно.

Подскажите , пожалуйста , раздел форума где создать подобную тему .
#209294
29.04.2009 - 00:27
Иван Майоров / @Dizel
Slav4ik [209294]: А чем раздел "Велосипед" не нравиться? Я тоже думал над подобным.
#209297
29.04.2009 - 00:40
Викторович / @Slav4ik
Dizel [209297]: Блин, пока Макс не видит, скажу:

Там же в основном технические вопросы: электрика, электроника. Спортсмены не "взбунтуются" :) ?
Ну ты же в курсе про "Ночные покатушки"...
#209299
29.04.2009 - 00:44
Иван Майоров / @Dizel
Slav4ik [209299]: Поясняю: "Ночные покатушки" подразумевают именно покатушки, т. е. обсуждене передвижения на велосипеде, обсуждение электоники там не приветствуются, поскольку это специфичное обсуждение, для этого есть соответствующая тема, например "К вопросу об оптике на велосипеде". Озаглавить тему "Аккустика для велосипеда" и вести в ней рассуждения по заявленной теме тебе никто мешать не будет, при условии придерживания линии темы.
#209303
29.04.2009 - 00:56
Викторович / @Slav4ik
Dizel [209303]: Ладно, воспользуюсь твоим советом.

P.S. Про "Ночные покатушки" и что в них должно входить, и не входить..., давай, уже, спор закончим. Каждый остаётся при своём мнении.

К администрации: если решите, что я здесь "намусорил", можете "подчистить".
#209304
29.04.2009 - 01:05
Максим Пензин / @maxp
Slav4ik [209299]: Блин, пока Макс не видит, скажу - давайте только не будем держать меня за пугало и играть в партизанов :)

К администрации: если решите, что я здесь "намусорил", можете "подчистить". - вот спасибо-то.
Но лучше, все-таки, просто "не мусорить" - к поиску данный вопрос не имеет отношения.

Автору темы решать, к какому разделу она подходит лучше всего. В крайнем случае модераторы переместят её. Нет в этом ничего страшного или зазорного.
#209398
29.04.2009 - 11:12