【问题标题】:How to Implement Web Based Find File Database Via Text Search如何通过文本搜索实现基于 Web 的查找文件数据库
【发布时间】:2011-02-10 00:02:52
【问题描述】:

我有一系列这样的文件:

foo1.txt.gz
foo2.txt.gz
bar1.txt.gz
..etc..

以及描述这些文件的表格格式文件:

foo1 - Explain foo1
foo2 - Explain foo2
bar1 - Explain bar1
..etc..

我想做的是有一个带有简单搜索栏并允许人们输入的网站 foo1foo 最后返回 gzip 压缩文件和文件的相关说明。

实现这一点的最佳方式是什么,我应该使用什么样的工具。 抱歉,我是这个领域的新手。

更新: 具体来说,我想提供链接到匹配文件的 URL 列表。以便 人们以后可以选择下载哪一个。

【问题讨论】:

  • 如果用户选择foo 会发生什么还不清楚。他们会得到foo1,因为这是第一场比赛还是别的什么?
  • @RSK:如果人们输入“foo”,它应该返回“foo1”和“foo2”。

标签: php javascript linux perl yui


【解决方案1】:
  1. 您构建了一个 HTML 搜索表单。

    • 表单有一个文本输入元素

    • 提交时,表单将搜索字符串的值发送到后端脚本(例如,为简单起见,使用 CGI.pm 实现的 Perl CGI 脚本,尽管这些天使用更现代的 Web 框架,例如作为 Perl 的 Catalyst 或 EmbPerl 等模板框架)

  2. 后端脚本搜索匹配的文件:

    • 在 Perl 中打开匹配文件列表,如果文件位于子目录中,则使用 glob("*$search*.txt.gz") 或 File::Find 模块。

    • 打开、读取描述文件并将其解析为哈希映射文件,以“foo1”为基础到描述。

    • 运行grep 查找与搜索字符串匹配的文件名(使用正则表达式)

    • 打印带有列出找到的文件名及其描述的表格的 HTML 报告页面 - 该页面将被发送回浏览器。

    • 文件名将是下载文件的链接(见下文)。最简单的方法是将文件添加到“htdocs”树内的目录中 - 例如Web 服务器查找文档的目录中的某个位置。然后您可以通过 URL 引用它们。例如,如果您的主页是/home/webpages/main/index.html(URL 为http://mysite.com/index.html),您可以将文件作为/home/webpages/main/foofiles/foo1.txt.gz 和URL应该是http://mysite.com/foofiles/foo1.txt.gz

    您必须确保您的网络服务器可以发送带有适当内容标头的这些文件(例如,不会将它们作为文本/html 发送)。

【讨论】:

  • 注意:如果您想实际将匹配文件下载给用户,请更新您的问题以明确说明,我将为此添加说明。
  • 非常感谢。我已经将更新添加到 OP。请检查。
【解决方案2】:

出于性能原因,您可能想要做的是定期建立索引。有非常复杂的方法可以做到这一点,但也可以通过非常简单的方式制作出相当有用的东西。

本质上,“索引”与您在教科书末尾找到的内容非常相似,但将这个想法转化为计算机世界。您将需要扫描您的描述表,并构建一个键/值“字典”、“散列”或任何您的语言的等效结构。关键将是您在描述中找到的单词。这些值将是一个数组(或列表或任何您的语言所称的),其中可以找到该单词的 url。

当您处理查询时,您将查询中的单词分解,然后在字典中查找每个单词。然后每个“url”可以为 url 包含的每个单词获得一个点。然后,您根据每个 url 的点数对结果进行排名。或者,您可以通过在查找单词时找到的所有各种 url 数组之间执行集合交集来仅返回包含所有单词的结果。

根据您要达到的目标,您可以更复杂地构建索引,例如使用单词的语音表示作为键,而不是原始单词本身。当您进行搜索时,将搜索词分解为它们的语音表示,这样您就可以消除与常见拼写错误有关的问题。

或者,您可以通过为每个单词创建重复键来直接解决常见的拼写错误。

或者,您还可以索引字母三连音而不是整个单词,以捕捉具有不同时态和变位的单词的替代形式。

等等。等等

您可能不希望在每个查询上都构建此索引(否则,有什么意义?),因此您希望能够将其保存到磁盘并在执行期间将其(或部分)加载到内存中一个问题。无论您使用数据库,还是使用其他任何方式,我都由您决定。

【讨论】:

    猜你喜欢
    • 2021-03-10
    • 1970-01-01
    • 2011-03-09
    • 2011-07-22
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    相关资源
    最近更新 更多