Как лучше всего индексировать документ PDF или Word для полнотекстового поиска?

Мне нужно разработать автономное приложение со следующими функциями:

  1. Иметь интерфейс входа в систему, что означает, что я должен обрабатывать роли доступа.
  2. Интерфейс, который позволяет пользователям добавлять документы с определенными метаданными. Эти документы должны оставаться в локальной файловой системе по соображениям безопасности.
  3. Разрешить пользователю искать документ с определенными фильтрами (как я могу анализировать, индексировать эти данные, такие как PDF, Word и т. д.).
  4. Разрешить пользователю копировать, вставлять и сохранять документы.
  5. Обеспечить миграцию данных (документов).

Мои вопросы:

  • Какая архитектура будет наиболее полезной (многоуровневое веб-приложение MVC, использующее Java, с )?
  • Должен ли я использовать поисковую систему (ElasticSearch, Solr, Lucene), поскольку у меня есть тысячи документов, или просто RDBMS (MySQL) или базу данных NoSQL (например, MongoDB), которая будет указывать на мою файловую систему, содержащую мои документы?
  • Должен ли я использовать HADOOP, так как это автономное приложение?
Почему вы отменили мою правку?
Прости, я думал, что принял это!
Хорошо, нп; Я откатил его обратно. -- Вы пропустили несколько слов после «with» в «веб-приложении n-tier MVC, использующем Java, with»?

Ответы (1)

«Должен ли я использовать поисковую систему?»

Абсолютно. Хотя все базы данных позволяют какой-либо вид полнотекстового поиска, это ваша ключевая функция (насколько я понял), поэтому вы должны использовать лучшее в своем роде. У меня есть хороший опыт работы с ElasticSearch и elasticsearch-mapper-attachments .

Что касается внутреннего хранилища: elasticsearch-mongodb-river поддерживает вложения, хранящиеся в GridFS MongoDB.

«Какая архитектура будет наиболее полезной?»

Я вас не понимаю, так как сначала вы пишете, что вам нужно разработать автономное приложение, а затем просите Web-MVC. Я дам вам несколько заметок для обоих.

В общем, я бы предложил трехуровневую серверную часть с MongoDB, создающей уровень 3, ElasticSearch на уровне 2 и REST/XMLRPC/SOAP API, создающим внешний интерфейс, что позволяет вам использовать эту службу из различных приложений. Не то чтобы вы должны реализовать здесь некоторую аутентификацию и авторизацию. Чтобы запустить это в разумные сроки, я бы использовал Spring Data ElasticSearch вместе с spring-security. Вместе с Spring Data REST это должно позволить вам выполнить эту настройку довольно быстро, если у вас есть некоторый опыт работы с Spring.

После того, как вы настроите эту настройку, вы можете либо создать веб-приложение, которое выполняет вызовы API для вашего поискового API, либо создать какое-то приложение Swing, которое использует то же самое. Или построить оба. Что касается веб-приложения, оно зависит от ваших функциональных и нефункциональных требований, которых я просто не знаю, и на это нелегко ответить, и обычно требуется расширенный анализ. На этот вопрос нет универсального ответа.

Что касается используемой технологии: для веб-интерфейса, поскольку поисковый API разработан на Java, я бы придерживался его. Если вы следовали моим советам по API поиска: придерживайтесь одних и тех же инструментов, используйте Spring Web-MVC или Spring Boot. Альтернативой может быть приложение Node, в зависимости от ваших навыков. Преимущество отделения фактического поиска от приложения заключается в том, что вы можете выбрать все, что захотите: Django, Rails, Sails, что угодно.

«Должен ли я использовать HADOOP, поскольку это автономное приложение?»

Hadoop по определению является сетевым. Я просто не совсем понимаю, что вы имеете в виду под этим вопросом, но я думаю, что на него ответили выше.

спасибо за ваш ответ, поэтому вы предлагаете трехуровневое веб-приложение с MongoDB, Elastic и Spring MVC, Spring Security для аутентификации, однако я до сих пор не знаю, как сопоставить мои документы (Word, PDF, ...) с моим приложение, я должен связать mongodb с файловой системой или elasticsearch? Почему бы не использовать только Solr или lucene, поскольку это не распределенное приложение, у меня будут проблемы с масштабированием. По крайней мере, не могли бы вы поделиться со мной некоторыми полезными ресурсами или учебными пособиями, где я могу приступить к работе с этим трехуровневым решением, пожалуйста? С уважением
@Naou Боюсь, но ты должен сам докопаться до этого. Для этого нет учебника. И вы связываете ElasticSearch с GridFS MongoDB (где вы храните файлы). Вы можете использовать Solr или Lucene, но вам придется интегрировать их самостоятельно. Со стеками, которые я предложил, усилия относительно невелики;). Проблемы с масштабированием? Нет, если вы знаете, как правильно масштабировать. Масштабирование - очень сложная вещь, которую нужно сделать правильно, и она выходит далеко за рамки. Но в целом да, предложенная мной установка почти бесконечно масштабируема. Самый полезный ресурс для начинающих: University.mongodb.com/courses/M102/about
Спасибо, не могли бы вы поделиться своей архитектурой, настроенной на github, чтобы использовать ее в качестве отправной точки?