Currently, I'm working on a graduation project about designing a Document Management System (DMS) that incorporates some functionalities as follows:
- It won't use folders to organize documents; instead, they will be stored in a flat structure.
- Document organization heavily relies on assigning suitable metadata.
- Searching will involve full-text search (FTS) on the document content and an advanced search based on metadata.
- Metadata is in a key:value format, and there will be some kind of relation between values based on their semantic meaning (for example: iron man --belongs_to → marvel).
- Document recommendations will be based on the relations among metadata.
Considering these functionalities, Elasticsearch would be the first choice for FTS. Still, to model relationships among metadata, we need to use Neo4j. However, since we are currently using PostgreSQL, I would like to ask if it is best practice to use Elasticsearch, Neo4j, and PostgreSQL in the same system like this.
Note: I'm open to any other suggestions on other approaches to this problem, especially the "relation among metadata" part. Is this approach suitable for the problem, considering that my professor's instructions about this part are somewhat vague.
I've done some research about this, and I've only seen people using Elasticsearch together with Neo4j for a knowledge graph. But considering the DMS also has other functionalities that can be added later, such as permissions, workflow, and version tracking, I think these would utilize joins from a relational database such as PostgreSQL.