私はこれを数日間理解しようと試みており、私は近くにいるように感じますが、まだ葉巻はありません。現在作成中のサイトでApache solrを検索して、「作成済み」と「スコア」の2つの種類があるようにする必要があります。デフォルトの検索ソートはスコアですが、作成済みに変更する必要があります。
私はデフォルト自体を変更するところまで持っていますが、変更は無条件に追加されるので、明らかにスコアを超えて発生します。 argを使用するためにすべてのURLを再構築する必要がありますか、それともより簡単な方法はありますか?これが私のコードです:
注:いくつかのフィルターを削除するコードがありますが、それは問題とは関係ありません。念のために入れました。
function myhook_apachesolr_prepare_query(&$query, &$params) {
// Remove sorts
$query->remove_available_sort('type');
$query->remove_available_sort('sort_title');
$query->remove_available_sort('sort_name');
// Rename/Reorder sorts
$query->remove_available_sort('created');
$query->remove_available_sort('score');
$query->set_available_sort('created', array('title' => t('Most Recent'), 'default' => 'desc'));
$query->set_available_sort('score', array('title' => t('Most Relevant'), 'default' => 'asc'));
// Change the default sort to by date
$query->set_solrsort('created', 'desc');
}
以下のように、hook_apachesolr_query_alter()を実装して、新しいソート基準を追加できます。
/** * implements hook_apachesolr_query_alter()。 */ function my_module_apachesolr_query_alter($ query){ $ query-> addParam( ' sort '、' ss_date_field asc '); }
並べ替えオプションを使用する方法は、並べ替えオプションブロックを公開することです。あなたが持っている場合、それはあなたのために正しいリンクを生成します-あなたはそう考える以外に何もする必要はありません
<?php
// solrsort is the query parameter the block uses
if (!isset($_GET['solrsort']) || empty($_GET['solrsort'])) {
$query->set_solrsort('created', 'desc');
}
?>
私は次のようにして6でそれを行うことができました:
<?php
function MYMODULE_apachesolr_prepare_query($query, $caller) {
$query->remove_available_sort('sort_name');
$query->set_available_sort('changed', array('title' => t('Date'), 'default' => 'desc'));
}
?>
詳細については、このd.orgページを参照してください。 http://drupal.org/node/715276