我有一个文件夹(blogfiles/posts
),其中包含各种文本文件,编号为(1.txt,2.txt,3.txt ...),每个文件都有一个博客帖子(我没有学习SQL了)。我正在尝试为它创建一个搜索引擎,它将从文本框中获取查询(使用此部分完成),然后在文件中搜索查询中的每个单词,并返回结果(可能按照数量的顺序)这个词出现的次数)。
每个文本文件如下所示:
第1行的标题
在第2行发布的日期(以月份日期,年份形式)
发布正文以搜索第3行及以上
我目前有这段代码:
<?php
$q = $_GET["q"];
$qArray = explode(" ", $q);
//preparing files
$post_directory = "blogfiles/posts/";
$files = scandir($post_directory, 1);
$post_count = (count($files)) - 2;
$files = array_pop($files); // there are 2 server files I want to ignore (#1)
$files = array_pop($files); // there are 2 server files I want to ignore (#2)
foreach ($files as $file) {
//getting title
$post_path = $post_directory . $file;
$post_filecontents = file($post_path);
$post_title = $post_filecontents[0];
echo "<tr><td><a href=\"blog?p=" . $file . "\">" . $post_title . "</a></td></tr>";
}
if ($post_count > 2) {
$postPlural = "s";
}
echo "<tr><td>" . $post_count . " post" . $postPlural . ".";
?>
我现在为格式化道歉,我试图把它分开来排除故障。 任何有助于实现这一目标的帮助将不胜感激。
答案 0 :(得分:0)
搜索文件的方法有很多。
使用preg_match_all函数匹配每个文件的模式。
使用system()函数运行外部命令,如grep(仅在* nix下可用)。
使用strpos函数(不推荐使用,因为性能低且缺乏对模式的支持)。
如果您将面临大流量,最好使用预构建索引来加速搜索。例如,将帖子分成标记(单词)并添加位置信息以及单词,当用户搜索某些单词时,您可以先将单词拆分,然后查找索引。描述这种方法比实现它更简单。您可能需要现有的全文搜索引擎,如Apache Lucene。