gpt4 book ai didi

php - 在超过 600,000 个文件中进行快速文本搜索

转载 作者:IT王子 更新时间:2023-10-29 00:15:14 25 4
gpt4 key购买 nike

我有一个 php、linux 服务器。它有一个名为 notes_docs 的文件夹,其中包含超过 600,000 个 txt 文件。 notes_docs的文件夹结构如下-

 - notes_docs
- files_txt
- 20170831
- 1_837837472_abc_file.txt
- 1_579374743_abc2_file.txt
- 1_291838733_uridjdh.txt
- 1_482737439_a8weele.txt
- 1_733839474_dejsde.txt
- 20170830
- 20170829

我必须提供一个可以在浏览器上显示结果的快速文本搜索实用程序。因此,如果我的用户搜索“纽约”,则所有包含“纽约”的文件都应以数组形式返回。如果用户搜索“foo”,则应返回所有包含“foo”的文件。

我已经尝试过使用 scandirDirectory Iterator 的代码,这太慢了。搜索需要一分多钟,即使这样搜索也没有完成。我尝试了 ubuntu find ,它又慢了一分钟才能完成。因为文件夹迭代太多,notes_docs 当前大小超过 20 GB。

欢迎任何我可以用来使其更快的解决方案。我可以进行设计更改,集成我的 PHP 代码以 curl 到另一种语言代码。在极端情况下,我也可以更改基础设施(例如在内存中使用某些东西)。

我想知道业内人士是怎么做到的? Indeed、Zip Recruiter 的人都提供文件搜索。

请注意我有 2GB - 4GB 的 RAM,所以一直将所有文件加载到 RAM 上是 Not Acceptable 。

编辑 - 以下所有输入都很棒。对于后来的人,我们最终使用 Lucene 进行索引和文本搜索。它表现得非常好

最佳答案

为简单起见:每次您想进行搜索时,都没有快速打开、搜索和关闭 600k 文档的方法。 “超过一分钟”的基准可能是针对单个测试帐户的。如果您打算通过多用户网站搜索这些内容,您很快就会忘记它,因为您的磁盘 IO 将超出图表并阻塞您的整个服务器。

因此您唯一的选择是索引所有文件。就像其他所有快速搜索实用程序一样。无论您是使用评论中提到的 Solr 还是 ElasticSearch,还是构建您自己的东西。文件将被编入索引。

考虑到 txt 文件是您收到的 pdf 文件的文本版本,我敢打赌最简单的解决方案是将文本写入数据库而不是文件。无论如何,它不会占用更多的磁盘空间。

然后你可以在你的数据库上启用全文搜索(mysqlmssql 和其他支持它)并且我确定响应时代会好很多。请记住,创建这些索引确实需要存储空间,但其他解决方案也是如此。

现在,如果您真的想加快速度,可以尝试更详细地解析简历。尝试检索您经常搜索的位置、教育、口语和其他信息,并将它们放在单独的表/列中。这是一项非常艰巨的任务,几乎是一个独立的项目,但如果您想要一个有值(value)的搜索结果,这就是您要走的路。因为在没有上下文的情况下搜索文本会产生截然不同的结果,请想想您的示例“纽约”:

  1. 我住在纽约
  2. 我在纽约大学读书
  3. 在个人简历中我喜欢 Alicia Keys 的歌曲“new york”
  4. 我在 New York Pizza 工作
  5. 我出生在英国纽约州
  6. 我花了一个夏天饲养新约克夏犬。

关于php - 在超过 600,000 个文件中进行快速文本搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46104843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com