$closest", $query);
}
if ($query === "google") {
$fixed = true;
$fixes[] = str_replace($item, "duckduckgo", $query);
$fixesd[] = str_replace($item, "duckduckgo", $query);
}
if ($query === "microsoft") {
$fixed = true;
$fixes[] = str_replace($item, "redhat", $query);
$fixesd[] = str_replace($item, "redhat", $query);
}
if ($query === "windows") {
$fixed = true;
$fixes[] = str_replace($item, "linux", $query);
$fixesd[] = str_replace($item, "linux", $query);
}
if ($query === "apple") {
$fixed = true;
$fixes[] = str_replace($item, "raspberry", $query);
$fixesd[] = str_replace($item, "raspberry", $query);
}
if ($query === "france") {
$fixed = true;
$fixes[] = str_replace($item, "hell", $query);
$fixesd[] = str_replace($item, "hell", $query);
}
}
if ($fixed) {
echo("
");
if (count($fixes) > 1) {
echo("Showing results for \"$query\", did you mean:
");
foreach ($fixes as $i => $fix) {
echo("- \"$fixesd[$i]\"?
");
}
echo("
");
} else {
echo("Showing results for \"$query\", did you mean \"
$fixesd[0]\"?");
}
echo("
");
}
$elapsed_correct = microtime(true) - $start_correct;
// Actual Search
$start_search = microtime(true);
$matches = [];
foreach ($data["entries"] as $id => $item) {
$avg = -1;
$aavg = [];
$iparsed = strtolower(substr($item["title"], 0, 200));
$iparsed = preg_replace("/[^A-Za-z0-9 ]/", '', preg_replace("/[\.]/", ' ', $iparsed));
$qwords = explode(" ", $query);
if (trim($iparsed) !== "") {
foreach ($qwords as $qword) {
$sim = similar_text($iparsed, $qword, $perc);
if ($perc > 0) {
$aavg[] = $perc;
}
}
if (count($aavg) > 0) {
$aavg = array_filter($aavg);
$avg = (array_sum($aavg) / count($aavg)) / 50 - 1;
$matches[] = [
"id" => $id,
"relevance" => $avg
];
}
}
$avg = -1;
$aavg = [];
$iparsed = strtolower(substr($item["url"], 0, 200));
$iparsed = preg_replace("/[^A-Za-z0-9 ]/", '', preg_replace("/[\.]/", ' ', $iparsed));
$qwords = explode(" ", $query);
if (trim($iparsed) !== "") {
foreach ($qwords as $qword) {
$sim = similar_text($iparsed, $qword, $perc);
if ($perc > 0) {
$aavg[] = $perc;
}
}
if (count($aavg) > 0) {
$aavg = array_filter($aavg);
$avg = (array_sum($aavg) / count($aavg)) / 50 - 1;
$matches[] = [
"id" => $id,
"relevance" => $avg
];
}
}
}
usort($matches, function($a, $b) {
return $a['relevance'] <=> $b['relevance'];
});
$matches = array_reverse($matches);
$matches2 = [];
$prel = [];
foreach($matches as $match) {
if (!isset($prel[(string)$match["relevance"]])) {
$prel[(string)$match["relevance"]] = [$match];
} else {
$prel[(string)$match["relevance"]][] = $match;
}
}
$elapsed_search = microtime(true) - $start_search;
$start_parse = microtime(true);
$entriesdom = [];
foreach($prel as $item => $items) {
$shortest = -1;
foreach ($items as $word) {
$lev = levenshtein($query, $data["entries"][$word["id"]]["title"]);
if ($lev == 0) {
$closest = $word["id"];
$shortest = 0;
break;
}
if ($lev <= $shortest || $shortest < 0) {
$closest = $word["id"];
$shortest = $lev;
}
}
$entriesdom[] = [
"link" => "/out?q=" . $query . "&u=" . uniqid() . "&i=" . $closest,
"title" => $data["entries"][$closest]["title"],
"url" => $data["entries"][$closest]["url"],
"icon" => "/icon?q=" . $query . "&i=" . $closest,
];
}
header("Location: " . $entriesdom[0]["link"]);
die();