Полнотекстовый поиск статических файлов HTML на CD-Rom с помощью JavaScript - PullRequest
15 голосов
/ 31 августа 2009

Я буду доставлять набор статических HTML-страниц на CD-Rom; эти страницы должны быть полностью доступны для просмотра без доступа к Интернету.

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

Реализация поисковой системы в javascript была бы идеальным решением, но у меня возникли проблемы с поиском того, что выглядит солидно / актуально / популярно ...

Я нашел это: + jsFind + js-search

но оба проекта кажутся довольно неактивными?

Другим решением, помимо специальной поисковой системы в javascript, была бы возможность доступа к локальным индексам Lucene из javascript: сами индексы будут создаваться с помощью Lucene и копироваться на CD-Rom вместе с файлами HTML.

Редактировать : построил сам (см. Ниже).

Ответы [ 6 ]

11 голосов
/ 10 декабря 2009

Ну, на самом деле я построил это сам.

Существующие решения (которые я мог найти) были неубедительными.

Я хотел иметь возможность искать очень длинное дерево (ul / li / ul ...), которое отображается как одна страница; содержит более 5000 предметов.

Звучит немного странно, если такое длинное дерево отображать на одной странице, но на самом деле при свертывании / развертывании это гораздо более интуитивно понятно, чем на отдельных страницах, и, поскольку мы в автономном режиме, время загрузки не является проблемой (время разбора хотя, но Chrome потрясающий; -)

Функция поиска, предоставляемая современными браузерами (в любом случае FF и Chrome), имеет две большие проблемы: они ищут только видимые элементы на странице и не могут искать непоследовательные слова.

Я хочу иметь возможность искать свернутые элементы (не видны на экране); Я хочу найти «один два три» при поиске «один три» (как в Google / Lucene); и я хочу открыть только ветви дерева, содержащие найденные предметы.

Итак, что я сделал:

  1. создать инвертированный индекс слов <-> идентификаторы предметов из списка (через xslt) (около 4500 уникальных слов в документе)
  2. преобразовать этот индекс в группу массивов javascript (одно слово = один массив, содержащий идентификаторы)
  3. при поиске пересекаются массивы, представленные поисковыми словами
  4. шаг 3 возвращает массив идентификаторов, которые я могу затем открыть / выделить

Он делает именно то, что мне нужно, и это действительно быстро. Более того, поскольку он выполняет поиск по независимому «индексу» (массивам идентификаторов), он может выполнять поиск, когда список даже не загружается в браузер!

6 голосов
/ 02 апреля 2014

Первоначальный вопрос был задан в '09

Начиная с 14 года, lunr.js описывается как:

Простой полнотекстовый поиск в вашем браузере

См. Демо и Github репо .


ОБНОВЛЕНИЕ Сентябрь 2016: легкий нечеткий поиск в JavaScript http://fusejs.io/

2 голосов
/ 31 августа 2009

Zoom Search Engine может сделать это.

Я не использовал версию CD, но я использую версию PHP для своего сайта, и она работает очень хорошо.

1 голос
/ 18 сентября 2009

Я знаю, что многие люди используют Java для написания программ поиска на CD. У меня есть немного пожилой список различных бесплатных и коммерческих программ на Инструменты поиска для CD-ROM и DVD .

0 голосов
/ 08 февраля 2013

Fullproof - это изящная маленькая библиотека javascript, которая может служить для вас текстовым поиском. Это было бы полезно в этом контексте, но также полезно в модели «толстой веб-страницы».

0 голосов
/ 18 сентября 2009

Взгляните на CLucene -

http://sourceforge.net/projects/clucene

http://clucene.git.sourceforge.net/git/gitweb.cgi?p=clucene/clucene;a=summary

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

...