Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过文本搜索实现基于Web的文件数据库查找_Php_Javascript_Linux_Perl_Yui - Fatal编程技术网

Php 如何通过文本搜索实现基于Web的文件数据库查找

Php 如何通过文本搜索实现基于Web的文件数据库查找,php,javascript,linux,perl,yui,Php,Javascript,Linux,Perl,Yui,我有一系列这样的文件: foo1.txt.gz foo2.txt.gz bar1.txt.gz ..etc.. 以及描述这些文件的表格格式文件: foo1 - Explain foo1 foo2 - Explain foo2 bar1 - Explain bar1 ..etc.. 我想做的是有一个简单的搜索栏网站,并允许人们键入 foo1或只是foo,最后返回gzip文件和文件的相关解释 实现这一点的最佳方式是什么,我应该使用什么样的工具。 对不起,我是这方面的新手 更新: 我特别想给出链接

我有一系列这样的文件:

foo1.txt.gz
foo2.txt.gz
bar1.txt.gz
..etc..
以及描述这些文件的表格格式文件:

foo1 - Explain foo1
foo2 - Explain foo2
bar1 - Explain bar1
..etc..
我想做的是有一个简单的搜索栏网站,并允许人们键入
foo1
或只是
foo
,最后返回gzip文件和文件的相关解释

实现这一点的最佳方式是什么,我应该使用什么样的工具。 对不起,我是这方面的新手

更新: 我特别想给出链接到匹配文件的URL列表。以便 人们以后可以选择下载哪一个

  • 您构建了一个HTML搜索表单

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

    • 提交时,表单会将搜索字符串的值从发送到后端脚本(例如,为了简单起见,我使用CGI.pm实现了一个Perl CGI脚本,不过现在使用的是更现代的web框架,如Perl的Catalyst或模板框架,如EmbPerl)

  • 后端脚本将搜索匹配的文件:

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

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

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

    • 打印HTML报告页面,其中包含列出找到的文件名及其说明的表格-该页面将发送回浏览器

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

    您必须确保您的web服务器可以使用适当的内容头发送这些文件(例如,不会以文本/html格式发送)


  • 出于性能方面的原因,您可能需要做的是让一个周期性的过程构建索引。有非常复杂的方法可以做到这一点,但也有可能以非常简单的方式使某些东西相当有用

    从本质上说,“索引”与你在教科书结尾处找到的东西完全相同,但它可以将这个想法转化为计算机世界。您需要扫描描述表,并构建一个键/值“dictionary”、“hash”或任何您的语言的等价结构。关键将是您在描述中找到的单词。这些值将是一个URL数组(或列表或您的语言所称的任何东西),其中可以找到该单词

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

    根据您试图实现的目标,您可以更深入地了解如何构建索引,例如使用单词的语音表示作为键,而不是原始单词本身。进行搜索时,将搜索词分解为其语音表示形式,这样可以消除常见拼写错误的问题

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

    或者,您也可以为字母三元组而不是整个单词编制索引,以捕获具有不同时态和变化的单词的替代形式

    等等等等


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

    有一件事不清楚,如果用户选择
    foo
    ,会发生什么。他们会得到
    foo1
    ,因为这是第一次匹配还是其他什么?@RSK:如果人们键入“foo”,它应该返回“foo1”和“foo2”。注意:如果你真的想下载匹配的文件给用户,请更新你的问题,清楚地说明这一点,我会添加相关说明。非常感谢。我已经将更新添加到OP。请检查。