2013-09-02 4 views
2

Я разрабатываю приложение Node.js, которое хранит HTML-документы в базе данных MongoDB и хочет предоставить возможности полнотекстового поиска. Из того, что я вижу, полный текстовый поиск, включенный в MongoDB, ожидает, что документы станут простым текстом и поэтому не подходят для индексации моих html-документов. Правильно ли это предположение, и если да, то что люди рекомендуют для этого.MongoDB Полный текстовый поиск богатых документов

От чтения других SO posts Упругий поиск, по-видимому, самый рекомендуемый путь. Я не могу сказать, что я очень рад, что принесу Java-приложение на картинке. Также наличие совершенно отдельного приложения не является моим идеальным сценарием.

+0

У вас есть выбор, используйте отдельное приложение или нет. SO действительно не делает опроса, чтобы узнать, хотите ли вы или нет, этот выбор является вашим единственным. – Sammaye

+0

Хорошо, позвольте мне перефразировать. Есть ли способ фильтровать текст, который использует MongoDB для полнотекстового поиска, так что я мог бы лишить контент, такой как разметка HTML, чтобы он не был включен в индекс? – nevf

+0

В настоящее время нет – Sammaye

ответ

1

Вы можете выкинуть некоторое регулярное выражение в HTML и попытаться выполнить strip the markup из HTML. Вывод может быть проиндексирован MongoDB.

Это, вероятно, легче развивается, чем с помощью инструмента поиска, такого как ES или Solr (который действительно находится вне области действия здесь), но он не даст вам ничего: просто удаление HTML означает, что контекстная информация теряется , а неверный HTML может привести к проблемам.

+0

Не означает ли это, что мне нужно хранить каждый документ дважды, один раз с HTML, который не будет включен в Mongo FTS, а второй раз в виде обычного текста, который будет включен в Mongo FTS? – nevf

+0

Да, но поскольку HTML не нужно индексировать, это не должно быть большой проблемой. Кроме того, размер текста сравнительно мал, даже если вы сканируете страницы как сумасшедшие. Если вас беспокоят требования к пространству, текстовый индекс будет большой проблемой. HTML также может быть сжат, потому что он не может быть обыскан (любым разумно быстрым способом) в любом случае. – mnemosyn

+0

Данные индексирования всегда означают сохранение его дважды: один раз для хранения простого документа и один раз с индексом для быстрого поиска (обычно сложно или невозможно воссоздать полностью читаемый документ из полнотекстового индекса). Это также относится к ES. Он будет «тратить» дополнительное хранилище для индекса и (что может быть отключено) для исходного документа. Метод, предложенный @mnemosyn, на самом деле является тем, что ES делает с помощью своих «анализаторов», преобразующих вход в поисковый словарь токенов. ES просто тщательно внедряется, чтобы соответствовать стандарту с несколькими форматами документов. –