Попробуй взять самую свежую запись в блогах, введи в строку поиска фразу из неё из больше чем одного слова
Тебя ждёт сюрприз: записи ты не найдёшь
Каждый документ представляется в виде частот слов из общего списка слов, встреченных во всех документах. Например,
В смысле отвечают не в комментариях?
превращается в (2, 1, 1, 1, 1), а если добавляем
Вишня, они почти не были в интернетах, бедненькие.
то вектор последнего становится (1 ["в"], 0 ["смысле"], 0, 1, 0, 1, 1, 1, 1, 1, 1), а к первому дописываем нули, потому что Вишни, их, почти, были, интернетов, бедненьких там нет.
Потом прихожу я с запросом "Вишня, Черешня, в смысле". Это (1 "в", 1 "смысле", 0 "отвечают", ..., 1 "Вишня", 0, ...) Черешню не считаем вообще, в документах её не было.
Скалярное произведение поискового запроса на вектор первого комментария — 2*1 + 1*1 + 1*0 + ... + 0*1 ["Вишня"] + 0*0 + ... = 3; косинус угла между векторами — 3/(корень из 8 * корень из 3);
Скалярное произведение поискового запроса и второго — 1*1 + 0 + ... + 1*1 + 0... = 2. Косинус угла = 2/(корень из 8 * корень из 3).
То есть первый угол острее второго, векторы больше сонаправлены. Поэтому первый результат более релевантный, чем второй.
Понятное дело, к этой базовой идее ещё многое приделывают, чтобы оно работало как-то адекватно.