BitFunnel

редактировать
BitFunnel
Разработчик (и) Microsoft
Первоначальный выпуск2016; 4 года назад (2016)
Репозиторий github.com / BitFunnel
Написано наC ++
Платформа Windows, macOS, Ubuntu
Тип Индексирование поисковой системы алгоритм
Лицензия Лицензия MIT
Веб-сайтbitfunnel.org

BitFunnel представляет собой алгоритм индексации поисковой системы и набор компонентов, используемых в поисковой системе Bing, которая была сделана с открытым исходным кодом в 2016 году. BitFunnel использует битовые подписи вместо инвертированный индекс в попытке снизить стоимость операций.

Содержание
  • 1 История
  • 2 Компоненты
  • 3 Алгоритм
    • 3.1 Исходная проблема и обзор решения
    • 3.2 Теоретическая реализация Bit- Строковые сигнатуры
    • 3.3 Псевдокод для бит-строковых сигнатур
  • 4 ссылки
  • 5 Внешние ссылки
История

Прогресс в реализации BitFunnel был обнародован в начале 2016 года, и ожидалось, что в том же году будет полезная реализация. В сентябре 2016 года исходный код был доступен через GitHub. Документ, в котором обсуждается алгоритм и реализация BitFunnel, был выпущен Специальной группой по поиску информации Ассоциации вычислительной техники в 2017 году и получил награду за лучшую работу.

Компоненты

BitFunnel состоит из трех основных компонентов:

  • BitFunnel - сама система текстового поиска / поиска
  • WorkBench - инструмент для подготовки текста для использования в BitFunnel
  • NativeJIT - программный компонент, который принимает выражения, использующие C структуры данных, и преобразует их в высокооптимизированный ассемблерный код
Алгоритм

Обзор исходной проблемы и решения

В документе BitFunnel описывается «проблема соответствия», которая возникает, когда алгоритм должен идентифицировать документы с помощью ключевых слов. Задача задачи - определить набор соответствий, заданный корпусом для поиска, и запросом ключевых слов для сопоставления. Эта проблема обычно решается с помощью инвертированного индекса es, где каждый доступный для поиска элемент поддерживается с помощью map ключевых слов.

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

Теоретическая реализация сигнатур битовых строк

Подпись документа (D) может быть описана как логическое или его термина подписи:

SD → = ⋃ t ∈ DS t → {\ displaystyle {\ overrightarrow {S_ {D}}} = \ bigcup \ limits _ {t \ in D} {\ overrightarrow {S_ {t}}}}{\ displaystyle {\ overrightarrow {S_ {D}}} = \ bigcup \ limits _ {t \ in D} {\ overrightarrow {S_ {t}}}}

Аналогичным образом запрос для документа (Q) можно определить как объединение:

SQ → = ⋃ t ∈ QS t → {\ displaystyle {\ overrightarrow {S_ {Q}}} = \ bigcup \ limits _ {t \ in Q} {\ overrightarrow {S_ {t}}}}{\ displaystyle {\ overrightarrow {S_ {Q} }} = \ bigcup \ limits _ {t \ in Q} {\ overrightarrow {S_ {t}}}}

Кроме того, документ D является членом множества M ', если выполняется следующее условие:

SQ → ∩ SD → = SQ → {\ displaystyle {\ overrightarrow {S_ {Q}}} \ cap {\ overrightarrow {S_ {D}}} = {\ overrightarrow {S_ {Q}}}}{\ displaystyle {\ overrightarrow {S_ {Q}}} \ cap {\ overrightarro ш {S_ {D}}} = {\ overrightarrow {S_ {Q}}}}

Затем эти знания объединяются для создания формула, где M 'идентифицируется документами, соответствующими сигнатуре запроса:

M ′ = {D ∈ C | SQ → ∩ SD → = SQ →} {\ displaystyle M '= \ {D \ in C | {\ overrightarrow {S_ {Q}}} \ cap {\ overrightarrow {S_ {D}}} = {\ overrightarrow {S_ {Q}}} \}}{\displaystyle M'=\{D\in C|{\overrightarrow {S_{Q}}}\cap {\overrightarrow {S_{D}}}={\overrightarrow {S_{Q}}}\}}

Эти шаги и их доказательства обсуждаются в статье 2017 г.

Псевдокод для подписей битовых строк

Этот алгоритм описан в статье 2017 г.

M ′ = ∅ для всех D ∈ C, если SD → ∩ SQ → = SQ → тогда M ′ = M ′ ∪ {D} endif endfor {\ displaystyle {\ begin {array} {l} M '= \ emptyset \\ {\ texttt {for}} \ {\ texttt {all}} \ D \ in C \ {\ texttt {do}} \\\ qquad {\ texttt {if}} \ {\ overrightarrow {S_ {D }}} \ cap {\ overrightarrow {S_ {Q}}} = {\ overrightarrow {S_ {Q}}} \ {\ texttt {then}} \\\ qquad \ qquad M '= M' \ cup \ {D \} \\\ qquad {\ texttt {endif}} \\ {\ texttt {endfor}} \ end {array}}}{\displaystyle {\begin{array}{l}M'=\emptyset \\{\texttt {for}}\ {\texttt {all}}\ D\in C\ {\texttt {do}}\\\qquad {\texttt {if}}\ {\overrightarrow {S_{D}}}\cap {\overrightarrow {S_{Q}}}={\overrightarrow {S_{Q}}}\ {\texttt {then}}\\\qquad \qquad M'=M'\cup \{D\}\\\qquad {\texttt {endif}}\\{\texttt {endfor}}\end{array}}}
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-12 08:24:45
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте