Реализация оценки кликов Solr
После поиска и поиска в сети я нашел возможное решение с открытым исходным кодом для популярности кликов в solr (= не требует платной версии lucid work search).
В моих следующих двух ответах я попытаюсь решить проблему простым и немного сложным образом...
Но сначала несколько предпосылок.
Мы предполагаем, что Google-подобный сценарий:
1. пользователь вводит некоторые термины в текстовое поле и нажимает кнопку поиска
2. система (пользовательское веб-приложение в сочетании с Solr) будет создавать веб-страницу с результатами, которые можно нажимать
3. пользователь выберет один из результатов (например, для доступа к деталям) и сообщит системе об изменении "популярности" выбранного результата.
3 ответа
Очень простой способ.
Мы определяем поле под названием "популярность" в solr schema.xml
<field name="popularity" type="long" indexed="true" stored="true"/>
Мы предполагаем, что пользователь нажмет на документ с идентификатором 1234, поэтому мы (= веб-приложение) должны вызвать solr, чтобы обновить поле популярности документа с идентификатором 1234 с помощью URL-адреса.
http://mysolrappserver/solr/update?commit=true
и размещение в теле
<add>
<doc>
<field name="id">**1234**</field>
<field name="popularity" update="inc">1</field>
</doc>
</add>
Таким образом, каждый раз, когда веб-приложение запрашивает что-то для решения (комбинируя / упорядочивая поле 'boost' solr с нашим настраиваемым полем 'популярность'), мы получаем список, упорядоченный также по популярности.
Это интересный подход, однако я вижу в этом некоторые недостатки:
- Общее хранилище предметов будет резко расти с каждым поиском.
- Вы предполагаете, что выбор определенного предмета на 100% правильный, и это было сделано не по ошибке или только для краткости. Таким образом, вы можете получить неправильные результаты поиска по пути.
Я предлагаю только увеличивать счетчик или даже поддерживать относительный счетчик, основываясь на других результатах, которые пользователь не щелкнул по нему.
Более сложная идея состоит в том, чтобы обновить индекс solr, отслеживающий не только выбор пользователя, но и условия поиска, используемые для получения списка.
Прежде всего мы должны определить поле истории, где будут храниться используемые поисковые термины:
<field name="searchHistory" type="text_general" stored="true" indexed="true" multiValued="true"/>
Затем мы предполагаем, что пользователь поискал "что-то" и выбрал из списка результатов документ с идентификатором 1234. Веб-приложение будет вызывать экземпляр Solr по URL
http://mysolrappserver/solr/update?commit=true
добавление нового значения в поле searchHistory
<add>
<doc>
<field name="id">**1234**</field>
<field name="searchHistory" update="add">**something**</field>
</doc>
</add>
наконец, используя функцию solr termfreq в каждом следующем запросе, мы получим "оценку", которая в сочетании с полем "boost" может создать отсортированный список, основанный на популярности по количеству кликов (и истории поисковых терминов).