// Простая база данных сайтов
const sites = [
{
title: "Что такое поисковые алгоритмы",
url: "https://example.com/search-algorithms",
description: "Обзор алгоритмов, используемых в интернет-поиске: краулинг, индексация, ранжирование.",
keywords: ["алгоритм", "поиск", "интернет", "краулинг", "индексация"]
},
{
title: "PageRank от Google",
url: "https://example.com/pagerank",
description: "Как работает алгоритм PageRank и почему ссылки важны для ранжирования.",
keywords: ["pagerank", "google", "алгоритм", "ссылки", "ранжирование"]
},
{
title: "История поисковых систем",
url: "https://example.com/history",
description: "От Archie до Google: как развивались поисковые системы интернета.",
keywords: ["история", "поиск", "интернет", "google", "системы"]
},
{
title: "SEO и факторы ранжирования",
url: "https://example.com/seo",
description: "Основные факторы, влияющие на позицию сайта в поисковой выдаче.",
keywords: ["seo", "ранжирование", "факторы", "поиск", "сайт"]
},
{
title: "Нейросети в поиске",
url: "https://example.com/ai-search",
description: "Как искусственный интеллект меняет алгоритмы поиска и ранжирования сайтов.",
keywords: ["нейросети", "ии", "поиск", "алгоритм", "ранжирование"]
}
];
function tokenize(text) {
return text.toLowerCase().split(/\W+/).filter(w => w.length > 2);
}
// Упрощённый алгоритм ранжирования (TF-подобный)
function rankSites(query, sites) {
const queryWords = tokenize(query);
if (queryWords.length === 0) return [];
return sites.map(site => {
const text = (site.title + " " + site.description + " " + site.keywords.join(" ")).toLowerCase();
let score = 0;
queryWords.forEach(word => {
// Совпадения в заголовке — вес 3
if (site.title.toLowerCase().includes(word)) score += 3;
// В ключевых словах — вес 2
if (site.keywords.some(k => k.includes(word))) score += 2;
// В описании — вес 1
if (site.description.toLowerCase().includes(word)) score += 1;
});
return { ...site, score };
})
.filter(s => s.score > 0)
.sort((a, b) => b.score - a.score);
}
function search() {
const query = document.getElementById("query").value.trim();
const resultsDiv = document.getElementById("results");
if (!query) {
resultsDiv.innerHTML = "<p>Введите поисковый запрос.</p>";
return;
}
const results = rankSites(query, sites);
if (results.length === 0) {
resultsDiv.innerHTML = "<p>Ничего не найдено. Попробуйте другой запрос.</p>";
return;
}
resultsDiv.innerHTML = results.map((r, i) => `
<div class="result">
<h4>${i + 1}. ${r.title}</h4>
<p>${r.description}</p>
<a href="${r.url}" target="_blank">${r.url}</a>
<div class="score">Релевантность: ${r.score}</div>
</div>
`).join("");
}
// Поиск по Enter
document.getElementById("query").addEventListener("keypress", e => {
if (e.key === "Enter") search();
});