1

私はApacheSolr Search Integrationという名前の drupal 用の提供されたモジュールを使用して、Drupal サイトの検索機能を強化するために Apache Solr を使用しています。私は Solr の初心者であり、Solr の基本的な理解を持っているため、このクエリが法外に聞こえる場合は、事前にお詫び申し上げます。

ds_myDate最初に検索結果のソートに使用したという名前の drupal のフックの 1 つを介して追加された日付フィールドがあります。日付ブースティングを使用することにしました。これにより、検索結果は単に日付の降順で表示されるのではなく、関連性に基づいて表示され、日付でブーストされます。recip(ms(NOW/HOUR,ds_myDate),3.16e-11,1,1)HTTP 400エラーが発生したため、boostフィールドを追加して同じものを実装するようにフックを更新したら、

数値以外の従来の日付フィールド ds_myDate では ms() 関数を使用できません

同じことをグーグルで検索すると、このエラーを防ぐために、レガシー DateField の代わりに TrieDateField を使用することが提案されました。tds_myDate提案された命名規則に従って名前が付けられた TrieDate フィールドを追加し、ブーストをrecip(ms(NOW/HOUR,tds_myDate),3.16e-11,1,1)効果的に実現したようにブーストを実装しました。ただし、これには、すべてのコンテンツ (500k レコード近く) のインデックスを再作成して、新しい TrieDate フィールドを設定し、それを効果的に使用できるようにする必要があります。

ds_myDatemysql テーブルフィールドで変更クエリを実行してそのタイプを変更するなど、すべてのコンテンツを TrieDate フィールドに変換するなど、すべてのコンテンツのインデックスを再作成するよりも効果的な回避策があるかどうかを知りたいと思います。私は Solr の仕組みに慣れていないので、そのようなオプションが実現可能かどうか、またこの場合はどうするのが正しいかを知りたいと思うでしょう。

4

2 に答える 2

4

部分的な更新を行うことでそれを達成できる場合がありますが、そのためには Solr 4+ を使用し、すべてのインデックス付きフィールドを保存する必要があります。

これが私がこれで行く方法です:

  • Solrのバージョンが4以上であることを確認してください
  • すべてのインデックス付きフィールドが保存されていることを確認します (部分的な更新の要件)
  • 上記の 2 つの条件が満たされる場合、以下を実行するスクリプト (PHP) を記述します。
  • 1) 完全な Solr インデックスを反復処理し、ドキュメントごとに:
  • ----a) ds_myDate フィールドに格納されている値を読み取る
  • ----b) TrieDateField 形式に変換する
  • ----c) tds_myDate フィールドのみを部分的に更新して、Solr にプッシュします (サンプル クエリを参照)。

サンプルクエリ:

curl 'localhost:8983/solr/update?commit=true' -H 'Content-type:application/json' -d '[{"id":"$id","tds_myDate":{"set":$converted_Val}}]'

部分的な更新の詳細については、http ://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/ を参照してください。

于 2013-05-14T17:55:02.950 に答える