2013-05-18 4 views
49

Я ищу хороший с открытым исходным кодом (с LGPL или разрешающей лицензией) механизм индексирования для приложения node.js, что-то вроде Lucene. Я ищу индексирование и поиск в процессе и не интересуюсь серверами индексирования, такими как Sphinx или Solr.Есть ли хорошая индексация/поисковая система для Node.js?

Я не боюсь создавать привязки для библиотеки C/C++, поэтому я также открыт для таких предложений.

До сих пор я нашел

  • узла CLucene, который, кажется, не будет активно поддерживать больше (и имеет несколько открытых вопросов)
  • я мог бы создать мое собственное связывание для CLucene, но он, по-видимому, довольно редко поддерживается, и его текущая версия также находится совсем позади Java Lucene
  • Apache Lucy, который, кажется, предназначен для создания привязок для d но до сих пор у них нет привязок узлов (а не API C), и я не нашел никаких документов о создании привязок. Я также не нашел каких-либо критериев производительности.
  • узла поиска, который, кажется, отказались от
  • jsii, который, кажется, все еще прототип, а также отказались от
  • fullproof, который предназначен только для работы в веб-Broswer
  • lunr.js, который, кажется, разрешает сериализацию всего индекса, поэтому он не масштабируется

Я мог бы " roll my own ", но я предпочел бы использовать уже существующее решение.

EDIT: Почему меня не интересует автономный сервер индексирования: Я использую быструю базу данных хранилища ключей в процессе, поэтому для обработки запросов было бы довольно ненужной тратой времени.

ответ

11

Можете ли вы объяснить, почему вы не заинтересованы в использовании внешнего индекса? Для полнотекстового поиска я всегда возвращаюсь к использованию возможностей полнотекстового индексирования PostgreSQL - это очень быстро, индексирование не требует полного обновления индекса (например, Solr), а результаты возвращаются быстрее, чем решения на основе Lucene (такие как Elastic Search).

Но если вы действительно хотите сделать это в процессе, вы, вероятно, захотите посмотреть на Lunr: http://lunrjs.com/ - он работает в узле, а не только в браузере.

Edit: Вот где я получил свою статистику на Postgres быть быстрее, чем Lucene: http://fr.slideshare.net/billkarwin/full-text-search-in-postgresql - см Слайд 49.

Edit: Не уверен, какой скорости вы смотрите для в/из процесса, но наша база данных PostgreSQL может делать 100 тыс. запросов в секунду, не нарушая пота, и это даже не на SSD. Возможно, вы слишком задумываетесь о своих потребностях в производительности - ведь после того, как вам нужно перейти на несколько узлов (или используя кластер, чтобы использовать преимущества всех процессоров), вам все равно придется сбрасывать процесс.

+1

«и результаты возвращаются быстрее, чем решения на основе Lucene (например, Elastic Search)». Какие-то тесты, чтобы поддержать это? Я почти уверен, что большинство обзоров будут иметь это наоборот. –

+0

Я использую очень быструю базу данных в процессе для ее скорости. Таким образом, наличие индекса вне процесса сделает его довольно смешным. – Venemo

+1

Я смотрел на lunr, да, но в настоящее время он не поддерживает сохранение индекса без необходимости сериализовать весь индекс все время. – Venemo

12

Да, проверить недавно выпустила Norch

Norch основан на search-index модуле для Node.js, который в свою очередь основан на мощном индексе LevelDB Google.

EDIT: используйте search-index module для быстрого поиска «в процессе».

+0

Что добавляет 'Norch' поверх' search-index'? – Venemo

+0

Norch делает поисковый индекс доступным по HTTP и добавляет несколько других графических интерфейсов. – Fergie

+1

Пожалуйста, прочитайте вопрос, я сказал * Я ищу индексирование и поиск в процессе и не интересуюсь серверами индексирования * – Venemo

15

Просто обновление моего ответа выше, так как было так много дискуссий, я не хотел, чтобы это обновление терялось.

Вы можете скачать его здесь: https://github.com/fergiemcdowall/norch

+0

Короткий ответ: нет; Более длительный ответ: Forage сортирует по релевантности документа и дает владельцу простой, но мощный контроль над тем, насколько релевантность определяется; Самый длинный ответ: Forage не поддерживал сортировку по абстрактным полям, потому что это было рассмотрено как основная область проекта. Однако, вероятно, в какой-то момент в будущем функция сортировки будет добавлена, так как есть спрос на нее. – Fergie

+0

Как вы рассчитываете релевантность документа? – Venemo

+0

Woah есть @ пользователь2020565! Корма полностью доступна из нескольких процессов :) – Fergie

2

полнотекстовый поиск Light, является чистым в узлового модуля письменного JS для выполнения полнотекстового поиска. Здесь вы можете найти текущую ссылку на репозиторий git: https://github.com/frankred/node-full-text-search-light

Смежные вопросы