home

Поиск и блок похожих ресурсов

В коде ELiS появился функционал поиска похожих ресурсов.

Этот функционал позволяет создать блок "похожих ресурсов". Похожие ресурсы могут использоваться в качестве рекомендации почитать чего-то по схожей теме.

similar_resource_block_view.png

Принцип работы[править]

В код поиска подается нода (сущность) и по строковым значениям в её полях в поисковый сервер отправляется запрос нахождения похожих ресурсов, где между словами ставится ИЛИ.

Найденные ресурсы возвращаются в виде отранжированного массива ресурсов.

Дальше остаётся в блоке написать код темизации этих ресурсов

Зачем писать код самим вместо одного кода на всех в составе ELiS?[править]

Блок с похожими ресурсами по сути является основой для рекомендательной системы.

Но в разных проектах рекомендательные системы должна работать по разному, например в конструкторе ЭОР в рекомендательной системе следует рекомендовать не просто схожие по текстовому описанию ресурсы, но и те, у которых хорошие показатели тестов в плане сложности и дискриминативности. При этом показывать рекомендовать схожие ресурсы следует только преподавателям, чтобы они увидели что создали по теме другие и может переняли хорошие идеи, но не учащимся, так как учащиеся могут запутаться надо ли решать рекомендованные ресурсы.

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

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

Пример кода простейшего блока[править]

Вы можете создать блок admin/structure/block/add с текстовым форматом PHP и вставить следующий код:

 
  <?php
  global $base_url;
  $out = "";
  $node = menu_get_object();
  if (isset($node->nid) && isset($node->type)) {
    if (module_exists('elissearch')) {
      $results = find_similar_entity_elis_search('node', $node);
      $style = '<style>';
      $style .= '.elis-block__similar-resource div { ';
      $style .= '  height: 42px;';
      $style .= '  padding: 0.5em;';
      $style .= '  font-size: 16px;';
      $style .= '  max-width: 240px;';
      $style .= '  text-align: center;';
      $style .= '  border-radius: 0 0 6px 6px;';
      $style .= '  background: rgba(255,255,255,.7);';
      $style .= '  color: #323232;';
      $style .= '  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;';
      $style .= '}';
      $style .=  '.elis-block__similar-resource img { ';
      $style .= '  width: 240px;';
      $style .= '  height: 240px;';
      $style .= '  object-fit: contain;';
      $style .= '  background: rgba(0,0,0,.3);';
      $style .= '  border-radius: 6px 6px 0 0;';
      $style .= '}';
      $style .= '.elis-block__similar-resource { ';
      $style .= '  border: 6px;';
      $style .= '  margin: 1em;';
      $style .= '}';
      $style .= '.elis-block__similar-resources { ';
      $style .= '  display: flex; justify-content: center;';
      $style .= '  width: 100%;';
      $style .= '  flex-wrap: wrap;';
      $style .= '}';
      $style .= '</style>';
      if ($results != false) {
        for ($i=0; $i<count($results) && $i < 4; $i++) {
          $res = $results[$i];
          $out .= "<div class='elis-block__similar-resource' aria-hidden='true' onclick='location.href=\"{$base_url}/node/{$res->nid}?utm_source=elis&utm_medium=referral&utm_campaign=similar_block\"'><img src='{$base_url}/node/{$res->nid}/cover' alt='" . check_plain($res->title) . "'/><div>" . check_plain($res->title) . "</div></div>";
        }
        $out = '<div class="visible-lg-block"><noindex><h3 style="text-align: center;">Возможно вам понравится</h3>'. $style . "<div class='elis-block__similar-resources'>{$out}</div></noindex></div>";
      }
    }
  }
  print $out;
  ?>
  

similar_resources_block_code.png