Сортировка результатов поиска

Я реализую поиск по фразе и по ключевым словам вместе (скорее всего, у этого вида поиска есть имя, но я его не знаю). В качестве примера, поиск, который я люблю черепах, должен соответствовать:

I like turtles
He said I like turtles
I really like turtles
I really like those reptiles called turtles
Turtles is what I like

Короче говоря, строка должна содержать все ключевые слова, чтобы соответствовать.

Затем возникает проблема сортировки результатов поиска.

Наивно, я предполагаю, что чем ближе совпадения к началу результата И к исходному запросу, тем лучше результат. Как я могу выразить этот код?

Мой первый подход состоял в том, чтобы назначить оценку каждому ключевому слову в каждом результате на основе того, насколько близко ключевое слово находится к ожидаемой позиции, на основе исходного запроса. В псевдокоде:

score(result,query) {
    keywords = query.split(" ");
    score = 0
    for i to keywords.length() {
       score += score(result,query,keywords,i)
    }
    return score
}

score(result,query,keywords,i) {
    index = text.indexOf(keywords[i])
    if (i == 0) return index;

    previousIndex = text.indexOf(keywords[i-1])
    indexInSearch = query.indexOf(keywords[i])
    previousIndexInSearch = query.indexOf(keywords[i-1])

    expectedIndex = previousIndex + (indexInSearch - previousIndexInSearch)

    return abs(index - expectedIndex)
}

Чем ниже оценка, тем лучше результат. Баллы за приведенные выше примеры выглядят достаточно прилично:

I like turtles = 0
I really like turtles = 7
He said I like turtles = 8
I really like those reptiles called turtles = 38
Turtles is what I like = 39

Это жизнеспособный подход для сортировки результатов поиска?

Оставляя в стороне какой-либо семантический анализ, что еще я мог бы рассмотреть, чтобы улучшить его?

0 ответов

Другие вопросы по тегам