ermouth: (Default)
[personal profile] ermouth

Особых новостей нет. Сегодня в базу внесётся сотое предложение. На айфоне так и не работает в сафари, зато заработало в опере-мобайл.

Завтра вечером в Москву за летающим роботом. Серьёзно )

Ну и теперь про

Поиск

Как сделать поиск, меня волновало с самого начала. Виделось три пути:

  • скармливать гуглу RSS с последними предложениями (по РСС-лентам бот ходит чаще, чем просто по сайтам), а потом использовать поисковую машину гугла
  • понадеяться, что гугл будет корректно индексировать – и оперативно – информацию по ссылкам с хэшбэнгами
  • всё же придумать, как можно сделать нормальную индексацию и поиск без гугла

Первый путь я реализую чуть позже. Выбрался в результате третий – он сейчас и работает.

Сначала я изучил, какими запросами ищут по моей тематике – Яндекс.Директ прекрасная штука. Выяснилось, к примеру, что люди ищут практически всегда в именительном падеже, стало быть про склонения можно забыть.

То-есть, если решить вопрос синонимии (“деревянный дом” ≈ “сруб”), можно пользоваться встроенными в MySQL средствами поиска. Осталось придумать, что делать с релевантностью и как заставить MySQL искать одним простым запросом всё.

И да, я хотел такую поисковую машину, у которой только один аргумент на входе. И даже если мне надо найти что-то абсолютно точно – это тоже должен оставаться один параметр.

Осталось только подумав, скрестить в голове твиттер, bit.ly и просто поиск.

Из битли я взял эти вот идентификаторы бессмысленные типа http://bizwood.ru/#!j8a8ak8g. Это выдаст только предложения по пиломатериалам.

Из твиттера я взял возможность написать не только идентификатор (он кста хэштэг называется, не путать с хэшбэнгом, ога), а ещё и слова просто. http://bizwood.ru/#!j8a8ak8g кругляк выдаст уже только предложения по кругляку.

Ну а ссылка типа http://bizwood.ru/кругляк уже выдаст всё по кругляку, что найдётся.

Для такого поиска у меня сделана отдельная MyISAM-таблица. На них хорошо и быстро работает полнотекстовый поиск – правда с никудышной релевантностью. Ну у нас сортировка по релевантности – большей частью не дело сервера.

То-есть в этой таблице на каждую компанию, пользователя, место, предложение, статью и вообще всё, что можно адресовать этими вот хэштегами в стиле битли, есть одна запись. Она полнотекстовая и индексируется в полнотекстовом режиме.

Скажем, по ссылке http://bizwood.ru/#!bs13x8bs в таблице для поиска лежит примерно такой текст:

bs13x8bs 433gz3ku gf0zxs0x четырехкантный брус сечение 150×100 100×100 длина 2–6м сорт 0 ГОСТ 8486 материал хвойные породы усадьба дача

В начале – собственный идентификатор, ид компании и ид группы (брус). При таком хранении выборка по группе, компании, идентификатору или просто ключевому слову – дело одного очень быстрого и короткого запроса. Примерно так:

SELECT id FROM hashtable WHERE MATCH(content) AGAINST (‘строка поиска’) LIMIT x.

Этот запрос на выходе выдаёт только список объектов (типа так: bs13x8bs,vjb8jjea) результата поиска, но не сами объекты. Он ещё и поэтому очень быстрый.

В том-же запросе проверяется и доступ. Надумаю, может расскажу как организована безопасность и доступ – там две красивых идеи, сдёрнутые из двух разных моделей.

После этого сервер отдаёт клиенту ответ из этих идентификаторов. Это вот так выглядит http://bizwood.ru/getobjectsh.php?key=сруб (по ссылке голый json).

А вот выбор самих объектов идёт уже вторым запросом – по полученным идентификаторам, из основной базы.

То-есть поиск у меня двухпроходный. Это при двух-трёх запросах даёт существенный выигрыш в трафике и почти не приносит потерь скорости отклика.

Выигрыш в трафике получается буквально в несколько раз – потому что клиент может не запрашивать второй раз развернутое описание объекта. Получил в списке идентификатор – проверил, не попадалось ли это в предыдущих поисках – решил, загружать или нет.

А запросы, как правило, идут похожие. И из них треть – просто уточняющие.

Вот такой у меня быстрый полнотекстовый поиск. Осталось к нему прикрутить синонимию – это добавлять в описание объекта синонимы по словарю перед индексацией.

У этого поиска чудовищная релевантность.

В следующей части – как победить релевантность. Для тех, кто до сюда из Архангельска дочитал – пишите, позову вас посмотреть на летающего робота, как вернусь )

Date: 2011-04-20 07:44 pm (UTC)
From: [identity profile] ktototam-lj.livejournal.com
Запишите меня в список втыкающих на робота!

Date: 2011-04-20 08:34 pm (UTC)
From: [identity profile] http://users.livejournal.com/_mu/
+1 к повтыкать на робота

Date: 2011-04-21 10:54 am (UTC)
From: [identity profile] trubachev.livejournal.com
Дочитал, детали не особенно понял.

А робот тот, что с айфона управляется?

Date: 2011-04-25 12:11 am (UTC)
From: [identity profile] carpogoryanin.livejournal.com
А поуправлять дашь?)

Profile

ermouth: (Default)
ermouth

November 2021

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 26th, 2025 12:03 am
Powered by Dreamwidth Studios