ЛЖепоиск с 2000 года, и как его улучшить
Jun. 15th, 2016 10:04 amГруппа товарищей, предводительствуемая
kukutz, вчера запустила полнотекстовый поиск по русскоязычным архивам ЖЖ с 2000 по 2015 год. Исходным массивом для этого поиска послужила база объёмом в 1,4ТБ текста, накопленная Яндексом для его сервиса «Поиск по блогам», но с 2015 года в этом сервисе не используемая. Большое спасибо неленивым товарищам за этот полезный и удобный инструмент. Подробности о проекте — в его FAQ.

В ограничении поиска октябрём 2015 года нет никаких религиозных соображений. Одни практические. Прикрутить поиск по существующей базе записей — задача посильная, и команда добровольцев с нею успешно справилась. Замутить с нуля поискового робота, который индексировал бы все новые аккаунты, записи и комментарии, ежесекундно добавляемые в ЖЖ — ощутимая трата сил и денег, несоразмерная с ресурсами и возможностями текущей команды добровольцев (кстати, поддержать проект рублём можно здесь).
Другое дело, что любой запрос, полученный поисковой системой LJSear.ch, можно было бы превратить в гиперссылку для передачи сторонним поисковикам. Так с прошлого тысячелетия поступает Яндекс, который в конце каждой страницы своей выдачи предлагает пользователю «поискать то же самое» в Bing, Google и Mail.Ru. Но Яндекс, повинуясь звериным законам капитализьма, эту полезную фичу с каждым годом всё сильнее придушает, и применительно к блогам она сегодня у него не работает вообще, из-за несовместимости синтаксиса запросов у разных поисковиков. А ЛЖепоиск, будучи проектом некоммерческим, вполне мог бы взять на себя элементарное упражнение по динамическому переводу между языками Яндекса и Гугла. Благо все аргументы поиска, которые используются для уточения запросов к ЖЖ, известны и неизменны. То, что на языке Яндекса звучит как author:dolboeb, в Гугле обозначается как site:dolboeb.livejournal.com (без деления на персональные блоги и сообщества). Начало временного интервала, которое у Яндекса from_date_full, у Гугла — cd_min. Окончание — to_date_full и cd_max соответственно. Так что запрос вида
https://ljsear.ch/search?q=apple&author=dolboeb&dateFrom=946760400&dateTo=1443646800
будет выглядеть в Яндексе как
https://yandex.ru/search/?text=apple%20author%3Adolboeb&from_date_full=01.01.2000&to_date_full=01.10.2015
а в Гугле та же строка кодируется так:
https://www.google.ru/search?cd_min=01.01.2000&cd_max=01.10.2015&q=apple+site:dolboeb.livejournal.com
Скрипт, который на лету превращал бы любой запрос к ЛЖепоиску в гиперссылки на выдачу Гугла и Яндекса по тем же самым словам, авторам и временным промежуткам, не должен занимать больше двух строк на любом языке программирования. Одна строка для Яндекса, другая — для Гугла. И проблема поиска по датам поздней 31 октября 2015 года решится раз и навсегда, легко и непринужденно.

В ограничении поиска октябрём 2015 года нет никаких религиозных соображений. Одни практические. Прикрутить поиск по существующей базе записей — задача посильная, и команда добровольцев с нею успешно справилась. Замутить с нуля поискового робота, который индексировал бы все новые аккаунты, записи и комментарии, ежесекундно добавляемые в ЖЖ — ощутимая трата сил и денег, несоразмерная с ресурсами и возможностями текущей команды добровольцев (кстати, поддержать проект рублём можно здесь).
Другое дело, что любой запрос, полученный поисковой системой LJSear.ch, можно было бы превратить в гиперссылку для передачи сторонним поисковикам. Так с прошлого тысячелетия поступает Яндекс, который в конце каждой страницы своей выдачи предлагает пользователю «поискать то же самое» в Bing, Google и Mail.Ru. Но Яндекс, повинуясь звериным законам капитализьма, эту полезную фичу с каждым годом всё сильнее придушает, и применительно к блогам она сегодня у него не работает вообще, из-за несовместимости синтаксиса запросов у разных поисковиков. А ЛЖепоиск, будучи проектом некоммерческим, вполне мог бы взять на себя элементарное упражнение по динамическому переводу между языками Яндекса и Гугла. Благо все аргументы поиска, которые используются для уточения запросов к ЖЖ, известны и неизменны. То, что на языке Яндекса звучит как author:dolboeb, в Гугле обозначается как site:dolboeb.livejournal.com (без деления на персональные блоги и сообщества). Начало временного интервала, которое у Яндекса from_date_full, у Гугла — cd_min. Окончание — to_date_full и cd_max соответственно. Так что запрос вида
https://ljsear.ch/search?q=apple&author=dolboeb&dateFrom=946760400&dateTo=1443646800
будет выглядеть в Яндексе как
https://yandex.ru/search/?text=apple%20author%3Adolboeb&from_date_full=01.01.2000&to_date_full=01.10.2015
а в Гугле та же строка кодируется так:
https://www.google.ru/search?cd_min=01.01.2000&cd_max=01.10.2015&q=apple+site:dolboeb.livejournal.com
Скрипт, который на лету превращал бы любой запрос к ЛЖепоиску в гиперссылки на выдачу Гугла и Яндекса по тем же самым словам, авторам и временным промежуткам, не должен занимать больше двух строк на любом языке программирования. Одна строка для Яндекса, другая — для Гугла. И проблема поиска по датам поздней 31 октября 2015 года решится раз и навсегда, легко и непринужденно.
no subject
Date: 2016-06-15 07:12 am (UTC)no subject
Date: 2016-06-15 07:14 am (UTC)Спасибо.
no subject
Date: 2016-06-15 07:43 am (UTC)no subject
Date: 2016-06-15 08:13 am (UTC)no subject
Date: 2016-06-15 09:21 am (UTC)Настолько, что для израильских сообществ был написан свой поисковик.
no subject
Date: 2016-06-15 09:53 am (UTC)no subject
Date: 2016-06-15 10:12 am (UTC)А так - молодцы!
no subject
Date: 2016-06-15 10:12 am (UTC)Плохо ищет.
no subject
Date: 2016-06-15 10:15 am (UTC)no subject
Date: 2016-06-15 12:47 pm (UTC)no subject
Date: 2016-06-15 08:16 pm (UTC)Но хотел бы заметить, что по блогам не ищут с сортировкой по ссылочному ранжированию, по блогам ищут с сортировкой по дате.
Ну, то есть, в мои времена искали!
(кряхтит, потрясает клюкой)
no subject
Date: 2016-06-15 08:18 pm (UTC)no subject
Date: 2016-06-15 08:23 pm (UTC)Спасибо.
no subject
Date: 2016-06-15 10:33 pm (UTC)no subject
Date: 2016-06-16 07:10 am (UTC)Я как-то лет 8 назад выпросил у жежешечки неограниченный rate на вызовы API (я их еще через HTTP pipelining херачил), и реализовал PageRank на ранг пользователя, считая френдов за ссылки как-бы.
Щас нашел проект, вот топ-15, аффтар на почетном последнем месте, лол:
potterpuffs
quizgalaxy
iharthdarth
quizuniverse
e_grishkovets
toster
chich8
drugoi
elysesewell
doctor_livsy
tema
moocards
status
qcjeph
dolboeb
Но нужно понимать, что это чисто по френдам ранжировка, без учета постов, каментов, и т.д.
Короче, ни на какое волонтёрство у меня нет времени, но PageRank это просто, как две копейки, матрица ссылок умножается на себя до сходимости, по сути.
no subject
Date: 2016-06-16 08:18 am (UTC)Как любой инструмент, он имеет пределы своей полезности и применимости.
Если Вы — специалист по Веневитинову, и изучаете стихи этого поэта, Вам не нужно, чтобы PageRank при любом запросе к базе Вам напоминал, что Пушкин вообще-то круче.
Поскольку ЖЖ — СМИ авторское и периодическое, то критерии "кто написал" и "когда написано" тут более релевантны, чем абстрактный ссылочный вес отдельного автора. Если мне интересно прочитать посты людей, в реальном времени освещавших Норд-Ост, то мне совершенно не надо, чтобы мне вместо них пихали Варламова и Долю, у которых в 2002 году не было никакого ЖЖ, зато у них сегодня высокий PageRank.
no subject
Date: 2016-06-16 08:22 am (UTC)Ещё посоветовал бы потратить час-другой на вспоминание красивых use cases, это помогает новым пользователям проникнуться красотой функционала. И тот раздел FAQ, где даются примеры допустимых запросов, хорошо б пододвинуть к первому экрану — например, положить их в некий расхлоп формы поиска.
Это реально проблема, когда не понимаешь, что можно поискать.
Любого сервиса касается.
no subject
Date: 2016-06-16 09:30 am (UTC)С критериями можно играться, так что если вам интереснее мнения гуманитариев о Веневитинове (погуглил — какие-то нечитаемые у него вирши, но сейчас не об этом) в последние 10 лет, то и критерии вероятности перехода по ссылкам нужно настраивать соответствующим способом.
Подробности в книжке Ульмана, секшен 5.3, такие дела. В принципе, в нишевом поисковике можно под каждого пользователя запускать свой PageRank, вай нот, собсна.
no subject
Date: 2016-06-16 04:58 pm (UTC)Невозможно, например, отделить написанное в посте и в комментариях, потому что они вместе индексируются.
При этом гиперссылка Гугла на страницу с комментариями — динамическая, типа &page=2, а такие адреса и естественным порядком устаревают, и искусственно тасуются при перевёрстке дерева на стороне сервера.
no subject
Date: 2016-06-18 06:43 am (UTC)Прежде всего, разрешите попросить расписать подробнее раздел FAQ по адресу: https://ljsear.ch/faq#query-lang.
В частности непонятно, какие еще поля записи можно задать в запросе, кроме заголовка и тела (tags? Event? Current Mood & Music?).
Непонятно, как задать временной диапазон, хотя у Антона в посте есть пример. Не очень понятно, как задать область поиска: комменты юзера внутри журнала/сообщества, или все комменты к определенной записи. В возможностях это указано.
И вопрос. Правильно ли я понимаю, что несмотря на то, что максимальная выдача не превышает 1000 штук, с помощью ограничения даты можно получить остальные части полной выдачи?
Теперь примеры поисковых запросов, которые возвращают нулевой результат для индексированных блогов/сообществ из числа моих френдов:
https://ljsear.ch/search?q=author:andreios-ab.
https://ljsear.ch/search?q=community:ru-antireligion.
https://ljsear.ch/search?q=community:doktor-killer.
***
Cлучай с переименованием.
https://ljsear.ch/search?q=author%3Adotroga&in_comments=0&offset=0
https://ljsear.ch/search?q=author%3Amolodozhon&in_comments=0&offset=0
Юзер переименовал журнал с перенаправлением. Если не ошибаюсь, яндекс перенаправление учитывал и выдачи совпадали. Здесь они разделены, мы имеем записи по новому имени с момента переименования и отдельную выдачу по старому имени. Но тут могу спутать, может так и должно быть.
Пока всё, еще что замечу, сообщу.
Спасибо, хороших выходных :)
no subject
Date: 2016-06-18 11:39 am (UTC)Никакие.
> Непонятно, как задать временной диапазон, хотя у Антона в посте есть пример
В расширенном поиске (иконка с ползунками справа в поле поиска).
> Не очень понятно, как задать область поиска: комменты юзера внутри журнала/сообщества
В расширенном поиске
> или все комменты к определенной записи.
Этой возможности пока нет.
> Правильно ли я понимаю, что несмотря на то, что максимальная выдача не превышает 1000 штук, с помощью ограничения даты можно получить остальные части полной выдачи?
Абсолютно верно.
no subject
Date: 2016-06-18 11:41 am (UTC)Я запишу себе в todo заменять в author и community минус на подчерк автоматически.
Переименования сейчас никак не учитываются, да. Как было у Яндекса, я, к сожалению, тоже не знаю.
no subject
Date: 2016-06-18 03:00 pm (UTC)Лады, теперь все просто идеально работает. Кроме региональной заглушки, но это мелочи :)
no subject
Date: 2016-06-19 08:58 am (UTC)