网站搜索 php,php – 使用Indextank进行网站搜索

我在我的网站上实现了这个功能.基本上我有一个HTML表单,用户可以在其中查询:

(_INTRO_)
(_EXAMPLE_)

注意:所有[XXX]和(YYY)都是模板字段,您应该在代码中替换.

发送表单时,PHP文件将以单词分割查询:

$query = preg_replace('/\s{2,}/', ' ', $query);

$words = explode(' ', $query);

搜索目标文件夹中的每个文件(

$help_files = _get_all_files('help');

$help_files = array_slice($help_files, 0, MAX_RESULTS);

foreach($help_files as $file) {

请注意,我只搜索“帮助”文件夹,您应该根据自己的需要进行调整.另请注意,_get_all_files是一个自定义函数,它只列出给定文件夹中的所有PHP文件.

然后加载并解析文本:

$text_file = '';

$filename = $file['page'];

if (_file_exists($filename)) {

$text_file = _read_php_file($filename);

}

$text_file = strtolower($text_file);

$text_file = strip_tags($text_file);

$text_file = preg_replace('/\[_(.*?)_\]/', '...', $text_file);

$text_file = preg_replace(array('/\s{2,}/', '[\t\n]'), ' ', $text_file);

请注意,_read_php_file读取PHP内容文件,即与用户调用此文件时相同的内容.这是因为我使用模板而我的HTML文件不是直接的.如果使用静态HTML,则可以使用readfile()或类似的.

接下来,搜索单词:

$score = 0;

foreach ($words as $word) {

if (strpos($text_file, $word) !== false) {

$score++;

}

}

我知道它可以进行优化,但目前还没有必要.基本上,这段代码会对文本中找到的每个单词进行计数并获得分数.

接下来,您可能有兴趣创建文本摘录:

$pos = strpos($text_file, $words[0]);

$cut_ini = max($pos - RESUME_LIMIT/2, 0);

$extract = substr($text_file, $cut_ini, RESUME_LIMIT);

$extract = "...$extract...";

最后,如果得分有意义,我将所有这些信息存储在输出数组中(对于找到的每个文件):

if (($score > 0) && (count($words) / $score > 0.7)) {

$result = array (

'extract' => $extract,

'title' => $file['title'],

'link' => $file['page'],

'score' => $score

);

$results[] = $result;

}

当然,对于要索引的每个文件,所有这些都必须重新考虑,最后,您必须对数组进行排序:

usort($results, "_search_sort");

有了这个功能:

function _search_sort($a, $b) {

if ($a['score'] == $b['score']) {

return 0;

}

return ($a['score'] > $b['score']) ? -1 : 1;

}

最后,您将获得一个带有搜索结果的排序数组.我希望这有帮助.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值