[Sitecore]GetAncestorsとpaths.LongIDの比較

概要:現在のアイテムがコンテンツツリー上の位置を特定する際によく使用するGetAncestorsと paths.LongIDの比較 検証環境は次の通りです。 Sitecore 8   サイトを構築して行くうちによく現在のアイテムがコンテンツツリーの位置を特定する場合あります。よく使われるのはGetAncestorsまたpaths.LongIDとなります。同僚にどれが早いのかと聞かれ、いい質問だねと思って、比較をしてみました。 下準備 下記のサンプルアイテムを作成します。 GetAncestors サイトコアのコンテンツ API クックブックによりますと、GetAncestorsメソッドにて祖先にアクセスができると書かれています。 上記の例でLevelDアイテムの先祖をGetAncestorsで取得するとSitecore.Data.Items.Itemオブジェクト配列が返される Sitecore.Data.ItemPath.LongID 上記の例でLevelDアイテムのSitecore.Data.ItemPath.LongIDプロパティが Sitecore.Data.Items.ItemのオブジェクトIDの文字列を返されます。 コードの比較 さて、どちらか早いのかを知るにはコードを見てみましょう。両方のコードを見る限りでは両方とも、“Sitecore.Data.Managers.ItemManager” クラスを使用し、同じようなループが 使用されています。 検証 コードみるには同じようなループが使用していますが、返り値がオブジェクト配列に対して、文字配列を返す方が早いはずです。実際に検証してみましょう。。。下記のコードで同じ開始するアイテムから祖先にマッチするアイテムを見つけることをループに入れて、かかる時間を比較します。 その結果、Paths.LongIDの方がGetAncestorsより8倍も早かった。これは使用されるサーバーのリソース、メモリ、CPUなどにも影響されますが、ただ、Paths.LongIDの方早いのは間違いがないようです。。。 Test GetAncestors Paths.LongID 1 136ms 14ms 2 131ms 12ms 3 149ms 22ms 4 152ms 16ms 5 140ms 21ms 平均: 142ms 17ms GetAncestorsとItemPathを合わせてテストもしましたが、逆に20msほど遅かった。 if (startFrom.Axes.GetAncestors().Any(ancestor => ancestor.Paths.Path.Equals(“/sitecore/content/Home/Level A”)))   結論 Paths.LongIDの方が早いので、常にPaths.LongIDを使うべきとは、一括に言えません。確かにSitecore.Data.ItemPathクラスにあるメソッドの実行速度が速い、なぜなら、その返り値は “string” また […]

[Sitecore 8][Content Search][IFilter]IFilterを使ってサイトコアコンテンツ検索その三、Adobe Ifilter 9を使ってリファレンスフィールドにあるPDFファイルのコンテンツを検索

概要:AdobeIFilter9を使って、リファレンスフィールドにあるPDFファイルのコンテンツのインデックスをする手順を書きます。 検証環境は次の通りです。 Sitecore 8 Sitecore 7x   課題 前回ではAdobeIFilter9を使って、メディアファイルがインデックスすることを確認しました。 ただ、これはディフォルトでファイルがメディアライブラリにあります。特定のアイテムにてファイルファイルを使用する場合、そのファイルフィールドで指定しているPDFファイルのコンテンツをインデックスすることカスタムインデックスフィールドが必要になります。 今回その手順を書きます。 下準備 検証用にファイルフィールとを追加します。 手順 Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.configにて、_contentフィールドの抽出設定がありますそれをまねに独自のカスタムフィールドを定義して、PDFのコンテンツを抽出するのです。 1.独自のMediaItemIFilterTextExtractorを定義します。 2.必要な関数を追加 3.PDFのコンテンツを抽出するコードはこのクラスをライブラリよりコピーします。 Sitecore.ContentSearch.ComputedFields.MediaItemIFilterTextExtractor コートはそのままコピーすればいいですのであえてここで掲載しません。ただ、変更するのは一箇所です。メディアアイテムをする代わりに、ファイルフィールでしてしているメディアに切り替えることで、抽出したコンテンツをカスタムフィールドにてインディクスします。 4.クラスを追加した後、カスタムフィールドの定義をしましょう。 *この設定をパッチConfigとして、追加するのは普通です。また、パッチconfigのフィル名は”z”出始めましょう。その理由はイトコアはWeb.configファイルをアルファベット順にインクルードファイルを処理します。”z”でファイル名を始めれば別の.configにオーバーライドされなくでも済むからです。 今回、Sitecore.ContentSearch.Lucene.DefaultIndexConfigurationに直接追加することにします。追加する場所は二箇所です。 まず、抽出するメディアのタイプを有効、この場合はPDFです。 次に、カスタムフィールドを追加し、抽出するクラスを指定。   前回のAdobe Ifilter 9を使ってコンテントをインデックスの手順7に従います。 確認 ukeを使って、抽出したフィールド “mypdffilefield” にてPDFのコンテンツを確認。Lukeを使ってサイトコア8のLucenceインデックスの内容を確認する方法はこの記事を参考

[Sitecore 8][Content Search][IFilter]IFilterを使ってサイトコアコンテンツ検索 その二、Adobe Ifilter 9を使ってコンテントをインデックス

概要:AdobeIFilter9を使ってメディアのコンテンツのインデックスをする手順を書きます。 検証環境は次の通りです。 Sitecore 8 Sitecore 7x   必要なツール AdobeIFilter 9 SearchFilterView   下準備 1.インストールAdobeIFilter 9. zip file 解凍して、PDFFilter64installer.msiを実行 2.SearchFilterViewを解凍して、実行。AdobeIFilter 9がインストールされていることを確認。   設定 Adobe PDF iFilter 9 を使用するに当たって動作しないようとの記事がよく見かけます。 手動な設定が必要なので、ここにてまとめておきます。 1.Adobe PDF iFilter 9 を環境変数に追加。 Adobe PDF iFilter 9のパスを追加します。 %SystemRoot%\system32;%SystemRoot……………………………………..;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files\Adobe\Adobe PDF iFilter 9 for 64-bit platforms\bin\; 2.PDFFilterライブラリC:\Program Files\Adobe\Adobe PDF iFilter 11 for 64-bit […]

[Sitecore 8][Content Search][IFilter]IFilterを使ってサイトコアコンテンツ検索その一、概説

概要:IFilterを使ってサイトコアコンテンツ検索その一、概説の編。質問と答えの形式でサイトコアがIfilterを導入し、またIfilterの比較などを書いていきます 先日サイトコアKBにてAdobe IFilter 11 support for Sitecore Content Searchの記事がありました。基本的にSitecoreコンテンツ検索でAdobeIFilter バージョン11をサポートしていないので変わりにバージョン9を使うとことことです。私は以前PDF検索に関する作業があったので、私の経験をもとに三回を渡ってAdobe Ifilter使って感じたことまた、実際にセットアップの手順、そして、PDFファイルをメディアライブラリだけではなく、添付ファイルとして検索をする方法まで紹介していきたいです。 第一回として、質問と答えの形式でサイトコアがIfilterを導入し、またIfilterに関して書いていきます。 質問:そもそも、IFilter ってなに? 答え:  Windows でファイル検索を行う場合、それぞれのファイル形式に対応した IFilter を用意し、検索ソフトウェアでインデックスを作成する方法があります。IFilter により、HTML ファイルのようなテキストファイルはもちろん、Word ファイルのようなバイナリ形式のファイルについても、検索ソフトウェアから検索できるようになります。TET PDF IFilter は PDF に対応した IFilter で、PDF ファイルからテキストや XMP メタデータを抽出し、検索ソフトウェアで利用できるようにします。 質問:どのバージョンからIFilter が導入され、何のために使われているのですか? 答え: この記事によると Sitecore7にてComputed フィールドが導入され、メディアのコンテンツはこのComputed フィールドに抽出されます。これよれ、メディアのコンテンツまでインデックスすることがディフォルトで可能になりました。それまでに、独自のインデックスフィールを作成しなければなりませんでした。Ifilter使用というアプローチは設定を最小限にすることを狙っています。ただ、お客さんのフィードバックより、もっと柔軟な設定、つまり、必要とするものだけをインデックスするという要望を応じ、バージョン7.2以降はMIMEタイプ別の設定が可能になりました。 質問:何でAdobe IFilter が人気があるのですか? 答え: 無料だからです。。。 質問:Adobe の PDF IFilter 以外別の PDF Ifilterがないの? 答え: あります。メインで知られているのはこの二つです。 Foxit PDF IFilter PDFlib TET PDF Ifilte     […]