Если бы я хотел создать поисковую систему, как бы я начал? [закрыто]


9

Может ли кто-нибудь указать мне правильное направление? У меня действительно нет опыта написания кода, но я быстро учусь. Я не пытаюсь сказать, что это будет легко, но я надеюсь, что кто-нибудь сможет мне помочь ...


6
Если у вас нет опыта написания кода, как насчет того, чтобы сначала научиться писать код? Создание поисковой системы является своего рода излишним для кого-то новичка в программировании.
Теренс Понсе

3
Как говорит Теренс, это не что-то для новичков в программировании. Любая поисковая система, которая вообще хороша, имеет тенденцию быть довольно сложной работой, есть причина, по которой Google настолько массивен, что выполняет довольно сложную задачу довольно хорошо. Даже опытные программисты предпочитают использовать что-то готовое. Если вы дадите некоторое представление о том, для чего вы этого хотите, возможно, мы сможем указать вам правильное направление.
Orbling

2
Начните с меньшего проекта. Создание поисковой системы требует огромного количества кода. И как вы собираете все данные для вашей поисковой системы? Вам понадобится намного больше кода и обширная инфраструктура. На самом деле, пожалуйста, начните с небольших проектов и работайте, иначе вы просто расстроитесь.
Джеймс

1
Эта книга помогла мне понять, что такое поисковые системы и как они построены: nlp.stanford.edu/IR-book
devnull

Ответы:


16

Я написал это для блога, который у меня был когда-то в далеком прошлом, когда ... он больше не в Интернете, поэтому ... вот оно! :

Как написать поисковик

Даррен Роуз, работающий на probolgger.net, проводит проект по написанию групп на все, что угодно. Это один из немногих блогов, которые я читаю регулярно, поэтому я подумаю, почему бы не написать что-то, что стоит почитать для разнообразия, а скорее мою стандартную яростную напыщенную речь, где я в итоге буду угрожать нанести удар Хьюго Чавесу в горло.

Я решил написать «Как написать поисковик». Я выбрал эту тему по двум причинам:

  1. В Интернете не так много хорошей информации об этом.
  2. В настоящее время я пишу один для одного из моих клиентов.

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

Я использую довольно простую технику, у меня есть таблица (tblKeywords) с тремя полями:

  1. Itemid (Если вы делаете поиск в Интернете, это будет URL)
  2. KeyWord (проиндексированное ключевое слово)
  3. Вес (это числовое значение от 1 до 100, чем выше это число, тем более значимым (весом) является ключевое слово) * PK = ItemID + KeyWord

Первое, что я делаю, это собираю отдельные слова из любого места, которое имеет отношение к делу. Для моего клиента я вытащу слова из таблицы продуктов. В частности, из полей Itemid, ItemName, ItemShortDescription, ItemLongDescription, Производитель, ManufacturerSKU, Категория1, Категория2, Категория3 и т. Д. Если вы индексируете веб-страницы, вы можете извлечь данные из текста страницы, заголовка страницы, URL-адреса или ссылок на других страницах, которые ссылаются на индексируемую страницу.

Значение веса определяется тем, откуда пришло ключевое слово. Например, в моем случае SKU Изготовителя Предмета получил бы вес 100, в то время как слово из имени Предмета могло бы получить вес 25. Слово из ItemLongDescription может получить вес 5. Если вы индексируете веб-страницы, слова из заголовка страницы может получить вес 75, в то время как слово, выделенное жирным шрифтом, из текста страницы может получить вес 10. Если слово повторяется более одного раза или \ и в более чем одном месте, вы будете прибавлять вес для каждого раза такое случается. Например, если слово «Рубашка» происходит из двух мест для ItemId = 12345, ItemName (вес 25) и появляется дважды в ItemLongDescription (Вес 5 x2 = 10), то слово «рубашка» будет иметь общий вес 35 для ItemId = 12345.

Если кто-то выполняет поиск по "розовой рубашке", я ищу в своей таблице все слова "Розовый" или "Рубашка" и подсчитываю вес. Отображение предметов с наибольшим общим весом сверху.

SQL:

Select Itemid, sum(weight) as totWeight from tblKeywords
group by itemId having keyword in ('pink','shirt')

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


спасибо хороший ответ. что бы вы также предложили для группировки продуктов. Я имею в виду, что у вас есть около 1 миллиона просканированных страниц продуктов с разных сайтов. Вы хотите сгруппировать одни и те же продукты на разных веб-сайтах: programmers.stackexchange.com/questions/134292/…
MonsterMMORPG

@Monster - Как насчет комбинации "Производитель \ SKU"?
дебилы

Вы также можете купить (арендовать) эти данные у таких компаний, как Etilize
Morons

Вы можете объяснить это немного больше, потому что я не получил это. Спасибо.
MonsterMMORPG

3
Хороший практический ответ. Однако это игнорирует всю область исследования ака "Поиск информации". С точки зрения «Указания в правильном направлении» IR был бы лучше в моей голове.
Темная ночь

4

Свободно распространяемый проект « Введение в поиск информации» станет вашим основным справочным материалом. Он обрабатывает поиск (поиск информации) от базового до продвинутого уровня.


3

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


3
Поисковая система может использовать выходные данные веб-сканера, но в остальном они очень мало связаны друг с другом. Более того, быстрая и эффективная база данных разновидности SQL вряд ли сильно поможет в этом деле. Поисковые системы обычно создаются с использованием инвертированных схем индексации файлов, которые вообще не соответствуют шаблону SQL.
Марсело Кантос

@Marcelo Cantos: перевернутая индексация файлов звучит сложно: -0 - Спасибо за помощь в разъяснении моего ответа!
Palbakulich

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.