8

Solr インデックスを Sitecore に実装する必要があります。最善の方法を教えてください。

私は次のアプローチを見ました:

  1. パブリッシュ終了イベント (またはその他のイベント) をキャプチャし、アイテムを solr インデックスにプッシュします
  2. カスタム データベース クローラーを実装し、履歴テーブルからすべての変更を取得します。次に、カスタム インデックスを使用してデータを solr にプッシュします。

2番目のアプローチは、(私の意見では)進むべき道のように思えます。この場合、新しい検索インデックスまたは検索マネージャーを作成する必要がありますか?

誰かが以前にやったことがあるなら、正しい方向に私を向けることができますか? また、sitecore-solr の実装に関する記事へのリンクを投稿していただければ幸いです。

更新 OK、サイトコアのドキュメントを読んだ後、これが私が思いついたものです:

  1. solrserviceurl などのプロパティを設定し、インデックスとその定義 (カスタム solr インデックス) を追加できるカスタム SolrConfiguration クラスを作成します。

  2. SolrIndex を作成し、それを (構成ファイルで) SolrConfiguration に追加します。インスタンス化する solrindex は、Sitecore History Manager の AddEntry イベントをサブスクライブし、solr クローラーと通信する必要があります。

  3. カスタム プロセッサを作成し、サイトコアの初期化パイプラインに接続します。プロセッサーは SolrConfiguration を初期化する必要があります (ステップ 1 から)

  4. 構成ファイルのすべてが反射を使用して構築されるため、構成ファイルに基づいて構成のインスタンスを取得できます。

それはどのように聞こえますか。コメントをお願いできますか?

4

2 に答える 2

2

いくつかのサイトでこれを行い、新しい「公開」solr インデックスと「非公開」インデックスを作成する傾向があります。

中断します:

OnItemSaving

ものを未公開のインデックスにプッシュするイベント (これは必要ないかもしれません。プレビュー モードにするかどうかによって異なります)

OnPublishItemProcessed

ここで、公開されたインデックスへの追加と更新を処理します。コードを掘り下げることなく、ここで削除について何をするかはわかりませんが、OnItemDelete (後述) での削除は確実に処理します。

OnItemDelete

ここで中断して、公開されたインデックスと公開されていないインデックスから何かを削除します (Sitecore は削除を Web データベースに公開するために親ノードを公開するようにするため、ここで公開されたインデックスから削除すると思います)

できればコードを投稿したいと思います(しかし、私はしかめっ面になるでしょう)。

于 2012-08-21T11:55:52.027 に答える
2

既に投稿された回答 (物事を行うには良い方法だと思います) に加えて、その方法を共有します。

私たちは基本的に、Sitecore データベース クローラーを見て、それがどのように行っているかのようなことをすることにしました。

カスタム アイテム ジェネレーターの大幅に変更されたバージョンを使用して、厳密に型指定されたオブジェクトと、Solr スキーマに対応するプロパティを持つオブジェクトとの間のマッピングを容易にします。Solr との実際の通信にはSolrNetを使用します。

一般的な考え方は、(サイト ルートから始まる) すべてのアイテムを再帰的にループし、テンプレートに基づいて適切なタイプにマップするというものです。次に、そのアイテムのインデックス作成プロセスを実行します (一部のアイテムでは、実装で複数のドキュメントを Solr にインデックス化する必要があります)。

このアプローチは私たちにとって非常にうまく機能していますが、すべてを一度にインデックス付けしているため、インデックスに加えられた変更を反映して公開とサイトの間にわずかな遅延時間が発生する傾向があることに注意してください. 最初に見落としがありましたが、すぐに修正する予定です。これは、「未公開」のインデックスがないことです (つまり、更新を確認するにはサイトを公開する必要があります)。それは私たちのソリューションに実際にはそれほど影響しませんが、他のソリューションに影響を与えることは間違いなくわかりますので、それを覚えておいてください.

特にインデックスからアイテムを削除する必要はなかったので、publish:end イベントとしてインデックス作成を行います。

この追加の洞察がお役に立てば幸いです。私が知る限り、この特定の製品の組み合わせに関する情報はそれほど多くありませんが、それは間違いなく可能であり、非常に有用であると断言できます.

于 2012-08-21T18:56:37.770 に答える