Mat*_*ins 15 database linux grep elasticsearch
我有一组包含匿名医疗数据(年龄、国家、症状、诊断等)的文本文件。这个数据至少可以追溯到 30 年前,所以你可以想象我有一个相当大的数据集。我总共有大约 20,000 个文本文件。1TB。
我将需要定期搜索这些文件以查找特定字符串(不是正则表达式)的出现。搜索这些数据的最快方法是什么?
我尝试使用 grep 并递归搜索目录,如下所示:
LC_ALL=C fgrep -r -i "searchTerm" /Folder/Containing/Files
Run Code Online (Sandbox Code Playgroud)
执行上述操作的唯一问题是搜索这些数据需要几个小时(有时是半天!)。
有没有更快的方法来搜索这些数据?此刻我对不同的方法持开放态度,例如数据库、elasticsearch 等。如果我沿着数据库路线走下去,我将有大约。10 亿条记录。
我唯一的要求是:
1) 搜索将在我的本地计算机上进行(双核 CPU 和 8GB RAM)
2)我将搜索字符串(不是正则表达式)。
3) 我需要查看所有出现的搜索字符串和它所在的文件。
已经有很多答案了,我只想补充两点:
建议
关于实施方面,我建议使用 Elasticsearch(ES) 来实现,因为它非常容易设置和扩展,您甚至可以使用 AWS Elasticsearch,它也可以免费使用,稍后可以快速扩展,尽管我我不是 AWS ES 的忠实粉丝,它节省了大量设置时间,如果您对 ES 非常熟悉,您可以快速上手。
为了使搜索更快,您可以将文件拆分为多个字段(标题、正文、标签、作者等)并仅对重要字段建立索引,这将减少倒排索引的大小,并且如果您仅查找精确的字符串匹配(没有部分或全文搜索),那么您可以简单地使用keyword索引和搜索速度更快的字段。