搜索结果效率不高,php

搜索结果效率不高,php,php,twitter-bootstrap,search,Php,Twitter Bootstrap,Search,我正在使用Bootstrap 2.3.1;我有一个搜索功能和结果页面。结果非常具体 示例: 产品名称:AD-45。 键入搜索查询=生成大量结果 AD45不产生任何结果 如果第一个结果不产生任何结果,我怎么能忽略“-”,如果第一个结果不产生任何结果,我怎么能忽略“/” 这是我的密码: <?php if(!isset($_GET['s'])) { die('You must define a search term!'); } $highlight = true; //highli

我正在使用Bootstrap 2.3.1;我有一个搜索功能和结果页面。结果非常具体

示例:
产品名称:AD-45。
键入搜索查询=生成大量结果

AD45不产生任何结果

如果第一个结果不产生任何结果,我怎么能忽略“-”,如果第一个结果不产生任何结果,我怎么能忽略“/”

这是我的密码:

<?php

if(!isset($_GET['s'])) {
    die('You must define a search term!');
}

$highlight = true; //highlight results or not
$search_in = array('html', 'htm', 'php'); //allowable filetypes to search in
$search_dir = '..'; //starting directory
$recursive = true; //should it search recursively or not
define('SIDE_CHARS', 80);
$file_count = 0;
$search_term = mb_strtolower($_GET['s'], 'UTF-8');
//$search_term = $_GET['s'];
$search_term_length = strlen($search_term);
$final_result = array();

$files = list_files($search_dir);

foreach($files as $file) {
    $contents = file_get_contents($file);
    preg_match("/\<title\>(.*)\<\/title\>/", $contents, $page_title); //getting page title
    if(preg_match("#\<body.*\>(.*)\<\/body\>#si", $contents, $body_content)) { //getting content only between <body></body> tags
        $clean_content = strip_tags($body_content[0]); //remove html tags
        $clean_content = preg_replace('/\s+/', ' ', $clean_content); //remove duplicate whitespaces, carriage returns, tabs, etc
        //$found = strpos_recursive($clean_content, $search_term);
        $found = strpos_recursive(mb_strtolower($clean_content, 'UTF-8'), $search_term);
        $final_result[$file_count]['page_title'][] = $page_title[1];
        $final_result[$file_count]['file_name'][] = $file;
    }
    if($found && !empty($found)) {
        for($z = 0; $z < count($found[0]); $z++) {
            $pos = $found[0][$z][1];
            $side_chars = SIDE_CHARS;
            if($pos < SIDE_CHARS) {
                $side_chars = $pos;
                $pos_end = SIDE_CHARS + $search_term_length;
            } else {
                $pos_end = SIDE_CHARS * 2 + $search_term_length;
            }

            $pos_start = $pos - $side_chars;
            $str = substr($clean_content, $pos_start, $pos_end);
            $result = preg_replace('#' . $search_term . '#ui', '<span class="search">\0</span>', $str);
            //$result = preg_replace('#'.$search_term.'#ui', '<span class="search">'.$search_term.'</span>', $str);
            $final_result[$file_count]['search_result'][] = $result;
        }
    } else {
        $final_result[$file_count]['search_result'][] = '';
    }
    $file_count++;
}
?>

为什么只有在第一个结果不产生任何结果时才删除这些字符?我想说,你最好的办法就是一直剥掉它们。请详细说明你的评论。如果有一种更好的方法可以产生更好的结果并减少代码,我觉得这很好。我并不是说它可以产生更好的结果。让我把它分解一下:假设你的客户会完美准确地输入一个型号是不合理的。您可以将这些特殊字符全部剥离(在
$search\u term=mb\u strtolower($\u GET['s'],'UTF-8');
行之前,例如执行
$search\u term=str\u replace(数组(“-”,“\”,$\u GET['s']);
。我想这应该可以回答您问题中的“如何剥离字符”部分:)
function str_insert($str, $search, $insert) {
    $index = strpos($str, $search);
    if($index === false) {
        return $str;
    }
    return substr_replace($str, $insert . $search, $index, strlen($search));
}
if(strpos($search_term, "-40") > -1 || strpos($search_term, "-45") > -1) {}
else { $search_term = str_insert($search_term, "4", "-"); }