Алгоритмы индексирования для разработки приложения, такого как Google Desktop для поиска? - PullRequest
1 голос
/ 13 сентября 2009

Я хочу разработать приложение Google Desktop для поиска, такое как приложение, я хочу знать, какие методы / алгоритмы индексирования я должен использовать, чтобы получить очень быстрое получение данных.

Ответы [ 2 ]

7 голосов
/ 13 сентября 2009

В общем, вам нужен инвертированный индекс . Вы можете выполнить индексацию самостоятельно, но для правильной работы нужно проделать большую работу - вам нужно обработать основы , стоп-слов , расширив список публикаций для включения позиций в документ, чтобы вы могли может обрабатывать запросы из нескольких слов и так далее. Затем вам нужно сохранить индекс, вероятно, в B-Tree на диске - или вы можете упростить себе жизнь, используя существующую базу данных для хранения на диске, такую ​​как BDB . Вам также необходимо написать планировщик запросов, который интерпретирует пользовательские запросы, выполняет расширение запроса и преобразует их в серию сканирования индекса. Статья Википедии о Индексировании поисковой системы также дает хороший обзор всех проблем.

Или вы можете использовать существующую работу и использовать готовые решения для полнотекстового индексирования, такие как Apache Lucene и Compass (который построен на Lucene). Эти инструменты обрабатывают практически все подробности, описанные выше (и даже больше), поэтому вам остается только написать инструмент для построения и обновления индекса, передав все ваши документы в Lucene, и пользовательский интерфейс, позволяющий пользователям выполнять его поиск.

3 голосов
/ 13 сентября 2009

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

http://en.wikipedia.org/wiki/Burrows-Wheeler_transform

Я не видел в Интернете простого вступления, но здесь много деталей:

http://www.ddj.com/architect/184405504

...