2

Apache solr 検索の検索結果をカスタマイズする方法を教えてください。私はこれらの変数にしかアクセスできませんでした[comment_count] => [created] => [id] => [name] => [nid] => [title] => [type] => [uid] => [url ] => [スコア] => [本文] .

ステータス、投票などの他の変数にアクセスするにはどうすればよいですか....インデックスから(これらの値を取得するためにデータベースにアクセスしたくない、インデックス自体から取得したい)

結果スニペットでその特定のノードの投票数を表示する必要があります

私は理解する必要があります 1.投票フィールドにインデックスを付ける方法 2.投票、ステータスを表示する方法...結果スニペットで。

4

4 に答える 4

2

いくつかの理由から、投票はインデックス作成には適していません。

  • 投票はすぐに変わる可能性があります
  • 投票が行われると、ノードは更新されません。そのため、apachesolr はノードを再インデックスして変更を取得することを知りません。

「ステータス」が node->status 値を意味する場合、答えは常に 1 になるということです。非公開ノードは決してインデックス化されません。

ここで、インデックスに何かhook_apachesolr_update_index(&$document, $node)のものを追加したい場合は、必要です。このフックは、各ノードがインデックス化されているときに呼び出され、$node から $document にフィールドを追加して、値を solr インデックスに取得できます。ただし、定義済みのフィールド接頭辞を使用したい場合は、schema.xml を見てリストを見つけてください。

于 2011-02-27T04:47:31.087 に答える
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 にアクセスしてテーマレジストリをクリアすることを忘れないでください

または、前述のように、プリプロセッサ フックを使用してオーバーライドできます。

よろしく、 スラバ

于 2011-06-15T09:17:14.497 に答える
1

もう 1 つのオプションは、入力引数 nid を使用して好みのビューを作成し、template.php ファイルに次の前処理を作成することです。

function MYTHEME_preprocess_search_result(&$vars) {

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

}

ビュー名「myView」を変数名と一致させることは、私には理にかなっています。次に、変数 $myView を search-results.tpl.php ファイルで使用できます。

于 2011-04-27T20:23:31.323 に答える
0

これは、Solr Search Integrationモジュールのメーカーによるビデオで、インデックス付けされるノードとフィールドをカスタマイズする方法と、Solrが検索結果として吐き出すものの概要を示しています...

Drupal 6の場合: http ://sf2010.drupal.org/conference/sessions/apache-solr-search-mastery.html

そしてDrupal7: http ://www.acquia.com/resources/acquia-tv/conference/apache-solr-search-mastery

それはすべて非常にカスタマイズ可能に見えます!

于 2012-05-04T12:53:18.997 に答える