Поиск по FaceBook: какие технические требования и инновационные функции заслуживают внимания? - PullRequest
3 голосов
/ 24 сентября 2010

Facebook ввел в свой поиск некоторые уникальные функции - возможно, некоторые даже запатентованы? Функции, о которых я говорю, обусловлены тремя различными требованиями:

  1. Тот факт, что их база данных гигантская, и они не могут просто присоединиться к нужным им данным по мере необходимости, как вы можете, как правило, в бизнес-приложении с одним домом, содержащим менее миллиона записей.
  2. Ожидания их пользователей формируются другими поисковыми системами, а именно Google, поэтому длинные поисковые запросы выполняются путем добавления ключевых слов к имени искомого человека, например, "Орландо, Флорида" или "Ротари Клуб". (или другое идентифицирующее значение, например, имя работодателя).
  3. Архитектура данных выглядит поверхностной, в зависимости от того, какое окно мы видим из приложения (конечно, оно не мелкое). Я хочу сказать, что помимо так называемой «Базовой информации» в профиле пользователя, такой как пол и текущий город, многое из того, что делает профиль уникальным, жестко не присваивается логическим столбцам.

Итак, сложность существует в потребностях, связанных с размером набора данных, НО с этим возникает необходимость предоставлять пользователю релевантные результаты сообществу пользователей, которые не разбираются в поиске, но имеют свои ожидания и обучение предоставлено Google.

Учитывая все это (уточнение моего вопроса):

a.) Какие функции поиска необходимы для FaceBook, которые мы должны принять к сведению и развернуть в наших собственных поисковых приложениях / движках? Под необходимостью я подразумеваю либо огромный размер набора данных или обусловлено ожиданиями пользователей и необходимостью органического роста сайта и увеличения его взаимосвязи между его данными - я имею в виду пользователей.

b.) Какие функции поиска являются инновационными и заслуживают внимания со стороны архитекторов данных и / или поисковых систем?

Некоторые из них очевидны, например, использование синонимов для имен - нечеткое сопоставление запроса «Билл» с записью «Уильям». Вы можете сделать это в Solr с помощью списка синонимов. Я бы назвал это базовой функцией, которая необходима, а не новаторской, конечно.

Другие, которые являются инновационными, заслуживают нашего внимания. Первый пример инноваций, на которые я могу обратить внимание, заключается в том, что их релевантность поиска настраивается для каждого пользователя. Если я наберу «Джон Смит», я получу другой набор результатов, чем другой поисковик (теоретически лучше подходит для меня, людей в моей сети, друзей друзей и т. Д.). Прежде чем вы скажете, что это не инновационно, потому что вы можете просто ввести "Pizza" в Google, и они дадут вам релевантные результаты, добавив ваш язык к запросу, следуйте, пожалуйста. Я надеюсь, что ответы и обсуждения, на самом деле, на этот вопрос будут соответствовать некоторым техническим требованиям, а также предоставят идеи для включения в функции поиска.

Например ...

  • Как вы думаете, они запускают обычный пакетный процесс для денормализации данных? (то есть пакетное задание для создания таблицы связей первой степени разделения, второй степени и т. д.)
  • От такой партии или денормализации, тогда это ограничивает число попаданий? Это подтверждается возвращением только логически ближайших матчей «Джона Смита». Однако поиск необычных имен [таких как мое имя и фамилия], по-видимому, не зависит от ограничения результатов, и поиск будет смотреть по всему миру, полностью за пределами этих "нескольких степеней" разделения.
  • Увеличивают ли они рейтинг релевантности по возрасту, придавая больше релевантности матчам, близким к той же возрастной группе, что и искатель? (комментарий: кажется, что они должны, это может быть, по крайней мере, незначительный удар по скорости общения / встреч между поколениями, что не должно происходить - эвфемистично, я знаю)

Технически, на заднем плане, лучше всего провести процесс денормализации на уровне базы данных и затем проиндексировать «документы»?(пояснение: для тех, кто связан с поиском предприятия, «документ» - это MOL, похожий по концепции на запись в базе данных ... MOL)

ИЛИ, нет ли денормализации базы данных.Вместо этого процесс написания поискового индекса включает в себя запись в каждый «документ» соответствующей информации и людей, которые находятся «в сети» или находятся на расстоянии нескольких градусов друг от друга?

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

Следовательно, расширяя понятие релевантности поиска, зависящее от пользователя-поисковика, обратите внимание, что оно также является производным отнедавняя активность пользователя.Например, поиск «Джон Смит Орландо» может никогда не привести к «правильному» Джону Смиту, но после посещения правильной страницы FaceBook Джона Смита (предположим, вы получили его URL в письме), даже без добавления Джона Смита какдруг, последующий поиск Джона Смита, на этот раз, на самом деле вернет этот результат в следующий раз. [Интересно, сколько времени пройдет до того, как это истечет, или вообще оно устареет?]

Я использовал Facebook в качестве примера, потому что они огромные.Их размер обусловливает продуманную архитектуру - например, то, что остается в его нормальной форме, а что нет, потому что вы просто не можете JOIN 100 миллионов таблиц записей несколько раз (воссоединение одной и той же таблицы с другим человеком из другой "ветки").таблица ссылок или производная таблица может создать эффект «друзей друзей».

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

При этом обращая внимание на крупные сайты, которые работаютпоиск достаточно хорошо, есть техника для подражания, не так ли?

Какие методы существуют на FaceBook?И учитывая их размер, они не могут просто получить то, что нужно пользователю, когда ему это нужно, через ORM (не удар по ORM) - это требует хорошо спланированной нормализации, индексации на уровне SQL, нормализации DE и поискового сервера.индексация.

Кто-нибудь может подсказать, какие там существуют методы?В этом отношении любой крупный сайт с похожим поиском (и большим набором данных) также предоставит хорошие тематические предложения.

Ответы [ 2 ]

2 голосов
/ 25 сентября 2010

Для базы данных Facebook использует MySQL из-за своей скорости и надежности. MySQL используется главным образом как хранилище значений ключей , поскольку данные случайным образом распределяются среди большого набора логических экземпляров. Эти логические экземпляры распределены по физическим узлам, и распределение нагрузки выполняется на уровне физических узлов. Что касается настроек, Facebook разработал собственную схему разделения, в которой глобальный идентификатор присваивается всем данным. У них также есть настраиваемая схема архивации, основанная на частоте и актуальности данных для каждого пользователя. Большая часть данных распределяется случайным образом.

Для некоторых частей, таких как входящие, он использует базы данных NoSQL, которые «в конечном итоге непротиворечивы», и когда вы запрашиваете их кластер, вы получаете «лучший ответ в то время», а не обязательно то, что правильно.

Из некоторых частей вашего вопроса видно, что вы пытаетесь взять практики, которые работают в социальных сетях, и применять их более широко. В конце концов, Последовательный не будет работать в бухгалтерском учете, торговле, медицине или исследованиях. Если это последняя фотография тетушки Фанни с ее кошкой, никого не волнует, если страница FB не показывает самую последнюю, ВСЕ ВРЕМЯ. Вы готовы пожертвовать этой точностью ради такой банальности.

Превращение каждого бизнес-приложения 3-й нормальной формы в пары «ключ-значение», потому что это делает FB, я не желаю садиться в поезд.

1 голос
/ 24 сентября 2010

Вопрос довольно расплывчатый, и мы можем только предполагать, что делает Facebook.

Но вместо этого мы можем обсудить, как работает типичный поиск на основе Solr, что является более конкретной темой.Да, у вас есть для денормализации данных ( вот несколько полезных советов по проектированию схемы Solr ) при загрузке данных в индекс Solr.Этот процесс ETL может быть выполнен с помощью обработчика импорта данных или пользовательского процесса ETL.Источниками данных могут быть все что угодно, а не только реляционные базы данных.То, как вы разрабатываете свою схему, во многом зависит от того, какие поиски вы будете выполнять.

Полная денормализация (у Solr действительно плоская схема) означает отсутствие соединений, поэтому она довольно масштабируема (см. Solr shards и репликация ).

Другая ваша проблема - актуальность результатов поиска.Здесь Solr настраивается очень (см. Справочник по релевантности , FAQ ).Да, как вы говорите, это почти искусство, поскольку каждое приложение имеет свою концепцию релевантности, поэтому его нужно настраивать по-разному.И все же релевантность по умолчанию обычно приемлема для готового экземпляра Solr (спасибо разработчикам Solr и Lucene).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...