Индексация поисковой системы — это сбор, анализ и хранение данных для облегчения быстрого и точного поиска информации . Проектирование индекса включает в себя междисциплинарные концепции из лингвистики , когнитивной психологии , математики, информатики и компьютерных наук . Альтернативное название этого процесса в контексте поисковых систем , предназначенных для поиска веб-страниц в Интернете, — веб-индексация .
Популярные поисковые системы фокусируются на полнотекстовой индексации онлайн- документов на естественном языке . [1] Такие типы медиа , как изображения, видео, [2] аудио, [3] и графика [4] также доступны для поиска.
Метапоисковые системы повторно используют индексы других служб и не хранят локальный индекс, тогда как поисковые системы на основе кэша постоянно хранят индекс вместе с корпусом . В отличие от полнотекстовых индексов, частично-текстовые службы ограничивают глубину индексации, чтобы уменьшить размер индекса. Более крупные службы обычно выполняют индексацию с заранее определенным интервалом времени из-за требуемого времени и затрат на обработку, в то время как поисковые системы на основе агентов индексируют в реальном времени .
Целью хранения индекса является оптимизация скорости и производительности при поиске соответствующих документов для поискового запроса. Без индекса поисковая система сканировала бы каждый документ в корпусе , что потребовало бы значительного времени и вычислительной мощности. Например, в то время как индекс из 10 000 документов может быть запрошен в течение миллисекунд, последовательное сканирование каждого слова в 10 000 больших документах может занять часы. Дополнительное хранилище компьютера, необходимое для хранения индекса, а также значительное увеличение времени, необходимого для обновления, компенсируются временем, сэкономленным при поиске информации.
Основные факторы при проектировании архитектуры поисковой системы включают в себя:
Архитектуры поисковых систем различаются по способу выполнения индексации и методам хранения индексов в целях соответствия различным факторам проектирования.
Основной проблемой при проектировании поисковых систем является управление последовательными вычислительными процессами. Существует множество возможностей для состояний гонки и когерентных сбоев. Например, новый документ добавляется в корпус, и индекс должен быть обновлен, но индекс одновременно должен продолжать отвечать на поисковые запросы. Это столкновение двух конкурирующих задач. Учтите, что авторы являются производителями информации, а веб-сканер является потребителем этой информации, захватывая текст и сохраняя его в кэше (или корпусе ). Прямой индекс является потребителем информации, произведенной корпусом, а инвертированный индекс является потребителем информации, произведенной прямым индексом. Это обычно называют моделью производитель-потребитель . Индексатор является производителем доступной для поиска информации, а пользователи являются потребителями, которым необходимо выполнять поиск. Проблема усиливается при работе с распределенным хранилищем и распределенной обработкой. В попытке масштабироваться с большими объемами индексированной информации архитектура поисковой системы может включать распределенные вычисления , где поисковая система состоит из нескольких машин, работающих в унисон. Это увеличивает вероятность возникновения непоследовательности и затрудняет поддержание полностью синхронизированной, распределенной, параллельной архитектуры. [14]
Многие поисковые системы включают инвертированный индекс при оценке поискового запроса , чтобы быстро находить документы, содержащие слова в запросе, а затем ранжировать эти документы по релевантности. Поскольку инвертированный индекс хранит список документов, содержащих каждое слово, поисковая система может использовать прямой доступ для поиска документов, связанных с каждым словом в запросе, чтобы быстро извлечь соответствующие документы. Ниже приведена упрощенная иллюстрация инвертированного индекса:
Этот индекс может только определить, существует ли слово в определенном документе, поскольку он не хранит никакой информации о частоте и положении слова; поэтому он считается булевым индексом. Такой индекс определяет, какие документы соответствуют запросу, но не ранжирует соответствующие документы. В некоторых проектах индекс включает дополнительную информацию, такую как частота каждого слова в каждом документе или положение слова в каждом документе. [15] Информация о положении позволяет алгоритму поиска определять близость слов для поддержки поиска фраз; частота может использоваться для помощи в ранжировании релевантности документов запросу. Такие темы являются центральным направлением исследований поиска информации .
Инвертированный индекс представляет собой разреженную матрицу , поскольку не все слова присутствуют в каждом документе. Чтобы снизить требования к памяти для хранения компьютера , он хранится иначе, чем двумерный массив . Индекс похож на матрицы терминов документов, используемые в латентном семантическом анализе . Инвертированный индекс можно считать формой хэш-таблицы. В некоторых случаях индекс представляет собой форму двоичного дерева , которое требует дополнительного хранилища, но может сократить время поиска. В более крупных индексах архитектура обычно представляет собой распределенную хэш-таблицу . [16]
Для поиска фраз используется специализированная форма инвертированного индекса, называемая позиционным индексом. Позиционный индекс не только хранит идентификатор документа, содержащего токен, но и точную позицию(и) токена в документе в списке постов . Вхождения фразы, указанной в запросе, извлекаются путем навигации по этим спискам постов и определения индексов, в которых искомые термины встречаются в ожидаемом порядке (таком же, как и порядок во фразе). Таким образом, если мы ищем вхождения фразы «First Witch», мы должны:
Списки сообщений можно просматривать с помощью бинарного поиска, чтобы минимизировать временную сложность этой процедуры. [17]
Инвертированный индекс заполняется посредством слияния или перестроения. Перестроение похоже на слияние, но сначала удаляет содержимое инвертированного индекса. Архитектура может быть разработана для поддержки инкрементального индексирования, [18] где слияние идентифицирует документ или документы, которые должны быть добавлены или обновлены, а затем разбирает каждый документ на слова. Для технической точности слияние объединяет недавно проиндексированные документы, обычно находящиеся в виртуальной памяти, с кэшем индекса, находящимся на одном или нескольких жестких дисках компьютера.
После анализа индексатор добавляет указанный документ в список документов для соответствующих слов. В более крупной поисковой системе процесс поиска каждого слова в инвертированном индексе (чтобы сообщить, что оно встречается в документе) может быть слишком трудоемким, поэтому этот процесс обычно разделяют на две части: разработку прямого индекса и процесс сортировки содержимого прямого индекса в инвертированный индекс. Инвертированный индекс так называется, потому что он является инверсией прямого индекса.
Прямой индекс хранит список слов для каждого документа. Ниже приведена упрощенная форма прямого индекса:
Обоснованием разработки прямого индекса является то, что по мере анализа документов лучше промежуточно сохранять слова на документ. Разграничение обеспечивает асинхронную обработку системы, что частично обходит узкое место обновления инвертированного индекса. [19] Прямой индекс сортируется для преобразования его в инвертированный индекс. Прямой индекс по сути представляет собой список пар, состоящих из документа и слова, упорядоченных по документу. Преобразование прямого индекса в инвертированный индекс заключается только в сортировке пар по словам. В этом отношении инвертированный индекс представляет собой прямой индекс, отсортированный по словам.
Создание или поддержка крупномасштабного индекса поисковой системы представляет собой значительную проблему хранения и обработки. Многие поисковые системы используют форму сжатия для уменьшения размера индексов на диске . [20] Рассмотрим следующий сценарий для полнотекстовой поисковой системы в Интернете.
При таком сценарии несжатый индекс (предполагая, что это не объединенный , простой индекс) для 2 миллиардов веб-страниц должен хранить 500 миллиардов записей слов. При 1 байте на символ или 5 байтах на слово это потребует 2500 гигабайт дискового пространства. [ требуется цитата ] Это требование к пространству может быть даже больше для отказоустойчивой распределенной архитектуры хранения. В зависимости от выбранного метода сжатия индекс может быть уменьшен до доли этого размера. Компромисс заключается во времени и вычислительной мощности, необходимых для выполнения сжатия и распаковки. [ требуется цитата ]
Примечательно, что крупномасштабные поисковые системы включают стоимость хранения, а также стоимость электроэнергии для питания хранилища. Таким образом, сжатие является мерой стоимости. [ необходима цитата ]
Анализ документа разбивает компоненты (слова) документа или другой формы носителя для вставки в прямые и обратные индексы. Найденные слова называются токенами , и поэтому в контексте индексации поисковой системы и обработки естественного языка анализ чаще называют токенизацией . Иногда его также называют устранением неоднозначности границ слов, тегированием , сегментацией текста , анализом контента , анализом текста, добычей текста , генерацией конкорданса , сегментацией речи , лексическим анализом или лексическим анализом . Термины «индексирование», «парсинг» и «токенизация» используются взаимозаменяемо в корпоративном сленге.
Обработка естественного языка является предметом постоянных исследований и технологических улучшений. Токенизация представляет множество проблем при извлечении необходимой информации из документов для индексации с целью поддержки качественного поиска. Токенизация для индексации включает в себя несколько технологий, реализация которых обычно хранится как корпоративная тайна. [ необходима цитата ]
В отличие от грамотных людей, компьютеры не понимают структуру документа на естественном языке и не могут автоматически распознавать слова и предложения. Для компьютера документ — это всего лишь последовательность байтов. Компьютеры не «знают», что пробел разделяет слова в документе. Вместо этого люди должны запрограммировать компьютер на определение того, что составляет отдельное или отдельное слово, называемое токеном. Такая программа обычно называется токенизатором , парсером или лексером . Многие поисковые системы, а также другое программное обеспечение для обработки естественного языка включают специализированные программы для синтаксического анализа, такие как YACC или Lex .
Во время токенизации парсер идентифицирует последовательности символов, представляющих слова и другие элементы, такие как знаки препинания, которые представлены числовыми кодами, некоторые из которых являются непечатаемыми управляющими символами. Парсер также может идентифицировать такие сущности , как адреса электронной почты , номера телефонов и URL-адреса . При идентификации каждого токена могут быть сохранены несколько характеристик, таких как регистр токена (верхний, нижний, смешанный, собственный), язык или кодировка, лексическая категория (часть речи, например, «существительное» или «глагол»), позиция, номер предложения, позиция предложения, длина и номер строки.
Если поисковая система поддерживает несколько языков, то общим начальным шагом во время токенизации является определение языка каждого документа; многие из последующих шагов зависят от языка (например, морфология и разметка частей речи ). Распознавание языка — это процесс, с помощью которого компьютерная программа пытается автоматически определить или классифицировать язык документа. Другие названия распознавания языка включают классификацию языка, анализ языка, идентификацию языка и разметку языка. Автоматическое распознавание языка является предметом текущих исследований в области обработки естественного языка . Определение того, к какому языку относятся слова, может включать использование таблицы распознавания языка .
Если поисковая система поддерживает несколько форматов документов , документы должны быть подготовлены для токенизации. Проблема в том, что многие форматы документов содержат информацию о форматировании в дополнение к текстовому содержимому. Например, документы HTML содержат теги HTML, которые определяют информацию о форматировании, такую как начало новой строки, жирное выделение и размер или стиль шрифта . Если бы поисковая система игнорировала разницу между содержимым и «разметкой», в индекс была бы включена посторонняя информация, что привело бы к плохим результатам поиска. Анализ формата — это идентификация и обработка содержимого форматирования, встроенного в документы, которое управляет тем, как документ отображается на экране компьютера или интерпретируется программой. Анализ формата также называется структурным анализом, синтаксическим анализом формата, удалением тегов, удалением формата, нормализацией текста, очисткой текста и подготовкой текста. Проблема анализа формата еще больше усложняется сложностью различных форматов файлов. Некоторые форматы файлов являются фирменными, и раскрывается очень мало информации, в то время как другие хорошо документированы. Распространенные, хорошо документированные форматы файлов, которые поддерживают многие поисковые системы, включают:
Варианты работы с различными форматами включают использование общедоступного коммерческого инструмента синтаксического анализа, предлагаемого организацией, которая разработала, поддерживает или владеет форматом, а также написание собственного синтаксического анализатора .
Некоторые поисковые системы поддерживают проверку файлов, которые хранятся в сжатом или зашифрованном формате. При работе со сжатым форматом индексатор сначала распаковывает документ; этот шаг может привести к одному или нескольким файлам, каждый из которых должен быть проиндексирован отдельно. Обычно поддерживаемые сжатые форматы файлов включают:
Анализ формата может включать методы улучшения качества, чтобы избежать включения «плохой информации» в индекс. Контент может манипулировать информацией о форматировании, чтобы включить дополнительный контент. Примеры злоупотребления форматированием документа для спамдексинга :
Некоторые поисковые системы включают распознавание разделов, идентификацию основных частей документа, до токенизации. Не все документы в корпусе читаются как хорошо написанная книга, разделенная на организованные главы и страницы. Многие документы в Интернете , такие как информационные бюллетени и корпоративные отчеты, содержат ошибочный контент и побочные разделы, которые не содержат основного материала (того, о чем документ). Например, статьи на веб-сайте Wikipedia отображают боковое меню со ссылками на другие веб-страницы. Некоторые форматы файлов, такие как HTML или PDF, позволяют отображать контент в столбцах. Несмотря на то, что контент отображается или отображается в разных областях представления, необработанный контент разметки может хранить эту информацию последовательно. Слова, которые последовательно появляются в исходном контенте, индексируются последовательно, даже если эти предложения и абзацы отображаются в разных частях экрана компьютера. Если поисковые системы индексируют этот контент, как если бы это был обычный контент, качество индекса и качество поиска могут ухудшиться из-за смешанного контента и неправильной близости слов. Отмечены две основные проблемы:
Анализ раздела может потребовать от поисковой системы реализации логики рендеринга каждого документа, по сути абстрактного представления фактического документа, а затем индексации представления вместо этого. Например, некоторый контент в Интернете рендерится с помощью JavaScript. Если поисковая система не рендерит страницу и не оценивает JavaScript на странице, она не «увидит» этот контент таким же образом и неправильно проиндексирует документ. Учитывая, что некоторые поисковые системы не беспокоятся о проблемах рендеринга, многие разработчики веб-страниц избегают отображения контента с помощью JavaScript или используют тег Noscript, чтобы гарантировать, что веб-страница будет проиндексирована должным образом. В то же время этот факт также может быть использован для того, чтобы заставить индексатор поисковой системы «увидеть» другой контент, чем зритель.
Индексация часто должна распознавать HTML- теги для организации приоритета. Индексация низкого приоритета к высокому полю к меткам типа strong и link для оптимизации порядка приоритета, если эти метки находятся в начале текста, может оказаться нерелевантной. Некоторые индексаторы, такие как Google и Bing, гарантируют, что поисковая система не будет считать большие тексты релевантным источником из-за совместимости с сильной системой типов. [23]
Индексация метатегов играет важную роль в организации и категоризации веб-контента. Определенные документы часто содержат встроенную метаинформацию, такую как автор, ключевые слова, описание и язык. Для HTML-страниц метатег содержит ключевые слова, которые также включены в индекс. Ранее технология поисковых систем в Интернете индексировала только ключевые слова в метатегах для прямого индекса; полный документ не анализировался. В то время полнотекстовая индексация не была так хорошо развита, и компьютерное оборудование не могло поддерживать такую технологию. Дизайн языка разметки HTML изначально включал поддержку метатегов именно для того, чтобы быть правильно и легко индексированным, без необходимости токенизации. [24]
По мере развития Интернета в 1990-х годах многие традиционные корпорации выходили в «онлайн» и создавали корпоративные веб-сайты. Ключевые слова, используемые для описания веб-страниц (многие из которых были ориентированными на корпорации веб-страницами, похожими на брошюры о продуктах), изменились с описательных на маркетинговые ключевые слова, предназначенные для стимулирования продаж путем размещения веб-страницы высоко в результатах поиска по определенным поисковым запросам. Тот факт, что эти ключевые слова были указаны субъективно, привел к спамдексингу , который заставил многие поисковые системы принять технологии полнотекстовой индексации в 1990-х годах. Разработчики и компании поисковых систем могли поместить только определенное количество «маркетинговых ключевых слов» в контент веб-страницы, прежде чем высосать из нее всю интересную и полезную информацию. Учитывая этот конфликт интересов с бизнес-целью разработки ориентированных на пользователя веб-сайтов, которые были «липкими», уравнение ценности пожизненного обслуживания клиента было изменено, чтобы включить в веб-сайт больше полезного контента в надежде удержать посетителя. В этом смысле полнотекстовая индексация была более объективной и повышала качество результатов поисковой системы, поскольку она была еще на один шаг дальше от субъективного контроля размещения результатов поисковой системы, что, в свою очередь, способствовало исследованию технологий полнотекстовой индексации.
В поиске на компьютере многие решения включают метатеги, чтобы предоставить авторам возможность дальнейшей настройки того, как поисковая система будет индексировать контент из различных файлов, который не очевиден из содержимого файла. Поиск на компьютере больше находится под контролем пользователя, в то время как поисковые системы Интернета должны больше фокусироваться на индексировании полного текста.