web-dev-qa-db-ja.com

Drupal + Solr、日付を更新して検索結果を向上させる方法は?

新しく更新または作成されたコンテンツとの関連性を高めるために、検索結果を向上させようとしています。私が試したのは、以下を使用することです:

/**
 * Implementation of hook search_api_solr_query_alter
 */
function mml_search_search_api_solr_query_alter(array &$call_args, SearchApiQueryInterface $query) {
  // Boost by changed date. Fresher to top.
  $call_args['params']['freshness'] = 'recip(abs(ms(NOW/HOUR,ds_changed)),3.16e-11,10,1)';
}

しかし、効果がないようです。

任意の助けいただければ幸いです。

これは、ブーストしようとしている「フィールド」Imのsolr管理側のスクリーンショットです http://monosnap.com/image/A3c6WOGi71z0Smeke8tYgBbnoeNkyK

4

このモジュールは解決策かもしれません https://www.drupal.org/project/search_api_sorts

それ以外の場合は上記の方法を使用します-この投稿によると http://www.metaltoad.com/blog/date-boosting-solr-drupal-search-results

次に、[]を追加する必要があります

$call_args['params']['freshness'][] = 'recip(abs(ms(NOW/HOUR,ds_changed)),3.16e-11,10,1)';

しかし、テストした後でも、望む結果を得ることができます。

たとえば、値3.16e-11,10。私が理解している限り、それはその期間内に10のスコアを与えるミリ秒の年を意味します。その後減少します。

テストに使用した

call_args['params']['qf'][] = 'recip(abs(ms(NOW/HOUR,ds_changed)),86400000,21,1)';

これにより、その日に追加/変更された投稿のスコアが21になり、その後は毎日減少します。

3つの同一のリストを使用したテスト。そして、ブースト率が1を超えるタイトルのみが設定されています。記事の日付がリストに表示されません。注文。明らかなことを逃したことがありますか。

1
Deejay

Hook_apachesolr_query_prepareで、paramを使用して、ur重み付けを使用してurインデックスフィールドを追加します bf
このフックはquery_alterに似ていますが、クエリがキャッシュされる前に実行されます

パラメータへの参照 https://cwiki.Apache.org/confluence/display/solr/Common+Query+Parameters

  /**
     * Prepare the query by adding parameters, sorts, etc.
     *
     * This hook is invoked before the query is cached. The cached query is used
     * after the search such as for building facet and sort blocks, so parameters
     * added during this hook may be visible to end users.
     *
     * This is otherwise the same as HOOK_apachesolr_query_alter(), but runs before
     * it.
     *
     * @param object $query
     *  An object implementing DrupalSolrQueryInterface. No need for &.
     */

function module_apachesolr_query_prepare(DrupalSolrQueryInterface $query) {
     $query->addParam('bq','indexedFieldName^20');  
     watchdog("solrquery", '<pre>' . print_r( $query, true) . '</pre>');
}

利用した

 $query->addParam('bq','tm_display_name^20');

bq:ブーストクエリ:一致を検討するときに、用語またはフレーズを重要度で「ブースト」する要素を指定します。

Solrquery objがそのような結果になる場所

   [bq] => Array
                (
                    [0] => tm_display_name^40
                )

そのフィールドがすでにSolrでインデックス付けされていると仮定します。

そのフックを使用します。次に、コンテンツを検索します。最近のログメッセージ「solrquery」で、フィールドがbqに追加されているかどうかを確認してください

参照用のリンクを追加しました。 http://www.computerminds.co.uk/articles/boosting-solr-search-results-query-time

0
Orchid