Сортировка результатов поиска по клику пользователя?
Я сталкиваюсь с проблемой сортировки результатов Solr на основе журнала кликов пользователей. Я хотел бы, чтобы более доступные результаты были на первом месте. Кто-нибудь знает, как настроить или реализовать такое свойство в Solr?
Большое спасибо.
1 ответ
Хороший вопрос. Ваша проблема может рассматриваться как классическая проблема Коллективного разума или Мудрости толпы. Первым шагом является подсчет кликов по URL для определенного запроса, т. Е. Для каждого запроса, для пары URL вы будете вести подсчет для этого кортежа. Каждый раз, когда пользователь нажимает на определенный URL, счетчик увеличивается на 1. В качестве второго шага, когда Solr возвращает вам результаты, основанные на его алгоритмах ранжирования и релевантности (скажем, LCS, Vector Space и т. Д.), В дополнение к этому для каждого запроса, пара url вернула вам рамку формулы, которая добавляет определенное значение (основанное на количестве нажатий) к рангу, заданному Solr для документа, и затем вам необходимо отобразить результаты на основе общего полученного ранга.
Общий рейтинг, полученный для документа = рейтинг, данный Solr + рейтинг кликов Числовое значение, данное вами.
Например, при поиске "плана iphone" Solr возвращает следующие ссылки в порядке высокого ранга к низкому:
- яблоко
- AT&T
- Амазонка
Теперь вы проверяете для каждого запроса пару URL, т.е. {"план iphone", Apple} {"план iphone", AT&T} {"план iphone", Amazon} количество кликов, и вы узнаете это количество кликов для запроса. самый высокий для AT&T по сравнению с Apple. Используя свои пользовательские формулы и придавая вес кликам, вы снова запускаете вышеизложенное и меняете порядок их отображения.
Однако обратите внимание, что разработанные вами формулы не должны быть полезны для спамеров, которые могут изменять весь рейтинг вашего сайта, выполняя огромные клики по определенному документу (скажем, с помощью робота:))
Выше логика. Теперь есть два способа реализации вышеуказанного:
Изменить класс сходства с Lucene (http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/all/org/apache/lucene/search/S Similarity.html), т.е. сначала понять, как Lucene выполняет ранжирование, а затем встроить свой модуль в это
Реализуйте это как отдельную процедуру поверх Solr.
Примечание: Помните, что получить количество запросов, пар URL-адресов нелегко, если у вас большие / большие данные, в этом случае вам потребуется написать некоторые задания по сокращению карты, чтобы выполнить это.