如何自定义apachesolr的搜索结果(drupal 6)

时间:2009-06-15 13:54:12

标签: drupal drupal-6 solr

有人可以帮我如何自定义apache solr搜索的搜索结果。我只能访问这些变量 [comment_count] => [created] => [id] => [name] => [nid] => [title] => [type] => [uid] => [url] => [得分] => [正文]

如何从索引中访问其他变量,如 status,vote .... (我不想访问数据库以检索这些值,我想从索引中获取它本身)

我需要在结果摘录

中显示该特定节点的选票

我需要了解  1.如何索引投票领域  2.如何在结果摘录中显示投票,状态 ....

4 个答案:

答案 0 :(得分:2)

由于以下几个原因,投票是一个糟糕的索引选择:

  • 投票可以快速改变
  • 进行投票时,节点不会更新。因此,apachesolr将不知道重新索引节点以获取更改。

如果'status'表示node-> status值,则答案是它始终为1.未发布的节点从不编入索引。

现在,如果你想在索引中添加一些 else ,你需要hook_apachesolr_update_index(&$document, $node) - 在每个节点被编入索引时调用这个钩子,你可以在$ document中添加字段从$ node获取值到solr索引。但是,您希望使用预定义的字段前缀 - 查看schema.xml以查找列表。

答案 1 :(得分:2)

下面是添加用于排序和输出的字段的代码示例。

/**
 * Implementation of hook_apachesolr_update_index()
 * Here we're adding custom fields to index, so that they available for sorting. To make this work, it's required to re-index content.
 */
function somemodule_apachesolr_update_index(&$document, $node) {
  if ($node->type == 'product') {
    $document->addField('sm_default_qty', $node->default_qty);
    $document->addField('sm_sell_price', $node->sell_price);
    $document->addField('sm_model', $node->model);
    foreach ($node->field_images AS $image) {
      //$imagecached_filepath = imagecache_create_path('product', $image['filepath']);
      $document->addField('sm_field_images', $image['filepath']);
    }
  }
}

/**
 * Implementation of hook_apachesolr_modify_query()
 * Here we point what additional fields we need to get from solr
 */
function somemodule_apachesolr_modify_query(&$query, &$params, $caller) {
  $params['fl'] .= ',sm_default_qty,sm_field_images,sm_sell_price,sm_model';
}

如果您想完全自定义输出,您应该执行以下操作: 1)将search-results.tpl.php和search-result.tpl.php从/ modules / search复制到主题文件夹。 2)在search-result.tpl.php中根据需要使用$ result对象 3)不要忘记通过访问admin / build / themes

来清除主题注册表

或者如上所述,您可以使用预处理程序挂钩覆盖。

问候,斯拉瓦

答案 2 :(得分:1)

另一种选择是使用输入参数nid创建您喜欢的视图,然后在template.php文件中创建以下预处理:

function MYTHEME_preprocess_search_result(&$vars) {

$vars['myView'] = views_embed_view('myView', 'default', $vars['result']['node']->nid);

}

将视图名称'myView'与变量名匹配对我来说很有意义。然后,您可以在search-results.tpl.php文件中使用变量$ myView。

答案 3 :(得分:0)

以下是Solr搜索集成模块制作者的视频,其中概述了如何自定义索引的节点和字段,以及Solr作为搜索结果吐出的内容......

对于Drupal 6: http://sf2010.drupal.org/conference/sessions/apache-solr-search-mastery.html

Drupal 7: http://www.acquia.com/resources/acquia-tv/conference/apache-solr-search-mastery

这看起来非常可定制!