java - 如何使用 Java 在磁盘上索引文件名

标签 java file elasticsearch search

我编写了一个在磁盘上存储数百万个文件(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/

相关文章:

bash - 将文件追加到不带cat的bash文件中

file - 需要处理并加载到配置单元中的自定义定界符

elasticsearch - 使用JEST通过查询删除ElasticSearch

elasticsearch - 安装Elasticsearch 1.7

elasticsearch - Elasticsearch自定义分析器,带有ngram并且在连字符上没有单词定界符

java - 将 Property<Predicate<MyObject>> 绑定(bind)到 ListView(使用 SelectionMode.MULTIPLE)

java - 无法在 Java 中将 bigdecimal 转换为字符串

java - Quartz 作业正在运行 - 无法连接到 SFTP 服务器 - 连接重置

java - 无法逐行读取txt文件

c# - 在返回 WCF 流的同时流式传输到文件?