Реализация оценки кликов 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 с нашим настраиваемым полем 'популярность'), мы получаем список, упорядоченный также по популярности.

Это интересный подход, однако я вижу в этом некоторые недостатки:

  1. Общее хранилище предметов будет резко расти с каждым поиском.
  2. Вы предполагаете, что выбор определенного предмета на 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" может создать отсортированный список, основанный на популярности по количеству кликов (и истории поисковых терминов).

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