我编写了一个在磁盘上存储数百万个文件(20-30mb 文件)的服务,我需要编写一个搜索功能来按名称查找文件(无需搜索文件内容)或在资源管理器中查看文件(例如,在浏览器中作为文件夹结构进行导航)。我希望用 Java 使其快速、可靠且简单。比如说,我计划运行两个服务,这两个服务都可用于上传文件或按名称模式搜索文件。实现这一目标的最佳技术/方法是什么?将文件存储在磁盘上以及数据库中的路径和名称,搜索数据库并按路径从数据库中获取结果?还有其他好主意吗?我考虑过elasticsearch,但看起来像是一个沉重的解决方案。
最佳答案
这个问题太宽泛,而不是采用 SO 的格式(具体的编程问题主要包含代码片段,试图解决给定技术集的具体技术困难)。
有很多方法可以满足您的要求。然而,仅根据您问题中提供的信息,不可能推荐某些东西,因为我们并不真正了解您的要求。我来解释一下:
I plan to run two services both of which can be used to upload a file or search files by name pattern.
这是否意味着文件系统必须是分布式的? 如果是这样,请考虑云解决方案风格的 aws S3。
如果无法在云端运行,here您可以找到分布式文件系统的完整列表。
Elasticsearch 当然也可以用作搜索引擎,但它更像是一个成熟的搜索引擎,因此在这种情况下对我来说看起来有点大材小用。
您可能希望直接使用 lucene,这样您就不需要运行也可能失败的额外进程(ES 构建在 lucene 之上)。如果满足要求,Lucene 会将其索引直接存储在文件系统上。
现在你也在谈论数据库——这又是一个可能的方向,特别是如果你的项目中已经有一个数据库的话。一般来说,关系数据库管理服务器对搜索有一定的支持,但还有更高级的解决方案:例如,在 PostgreSQL 中,您有一个 GIN 索引(倒排索引),同样的全文搜索概念远远超出了标准 SQL 的 LIKE
运算符。
还有一个想法:使用本地磁盘。如果您使用的是 Linux,则有一个名为“locate”的索引实用程序,您可以将索引创建委托(delegate)给它。
所以选择权在你。
关于java - 如何使用 Java 在磁盘上索引文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59475541/