株式会社PFU 千葉辰典
今回は、「登録した文書が見つからない!」シリーズの解決編をお送りします。
※本Tipsを読む前に、前回のTips「登録した文書が見つからない!~ワードブレイク:検出言語編~」を読んでおいていただくと宜しいかと思います。
前回のTipsでは、ドキュメントのインデックス時に採用する辞書(=ワードブレーカー)は、ファイル名やプロパティではなく、その"中身"からSharePointが勝手に判断すると言う話を書きました。
登録するドキュメントの中身が"英語のみ"や"中国語のみ"のドキュメントでも、タイトルや備考欄などのプロパティ情報には"日本語"を入力したい場合に、そのプロパティ内容で正しく検索できないと言うことになり、これは困ります。
なおドキュメントだけではなく、リストアイテムも同様に、こちらはプロパティ情報に入力された文字列から勝手にワードブレーカーが判断されます。
ではどうするか?
そう、SharePointに勝手に言語を判定させずに、こちらが指定してしまえば良いのです。
今回のTipsでは、「登録時に言語を指定する」方法について、その手順とポイントを書いてみたいと思います。
※詳細についてはマイクロソフト社のoffice 365フォーラムに投稿されている「サイト内での検索結果の違いについて(外部リンク)」のサポートからの回答が分かりやすいと思います。
いくつかある解決策の一つですので、皆さまの運用環境に合わせて採用を検討してみてください。
(その他の解決策については文末で少し触れますので最後までお読みください。)
-----
前回のTipsと同じデータで検証してみましょう。
既定の状態でクロールされたドキュメントを、弊社の取り扱うSharePointの検索機能を強化するアドオン製品「KnowledgeLake Imaging」を使って見てみると、各ファイルの言語(language)と検出言語(DetectedLanguage)がSharePointによって自動的に判断されて以下のようになっています。
自動的に判断されるこの言語(language)を、ドキュメントの登録時に明示的に指定することにより、意図する言語で検出させることが可能になります。
以下、手順です。
-----
まず、対象のライブラリまたはリストに、言語を明示的に指定させるための列を"新規"で追加します。
複数設定する場合は、サイト列に追加してから選択しても良いですし、サイトコンテンツタイプの"ドキュメント"に追加してしまっても良いです。
下図の例ではサイトコンテンツタイプの"ドキュメント"に、「Lang」と言う名称で列(=サイト列)を追加しています。
ちなみに、既定で存在する「基本の列:言語」は使えないの?と思ってしまいますが…これは使用できません。言語判定させるには、値が言語に対するコード(日本語なら”ja”、英語なら”en”)である必要がありますが、既定の「基本の列:言語」の値(選択肢)は、”日本語 (日本)”や”中国語 (中国)”と判読可能な文字列になっているためです。
追加する列は、想定する運用ケースによって選択してください。例えば・・・
- 多言語のドキュメント/アイテムを1ヵ所で管理し、登録者に言語を選択させる場合:
→ 選択肢 (メニューから選択) - ここに登録するのは日本語のみ、など言語を固定する場合:
→ 1行テキスト
・ 既定値:ja
・ 列設定:非表示 (フォームに表示しない)
選択肢には、選択させたい言語コードを入力します。
…JavaScriptなどのように、値(value)とテキストを別々に指定できないので利用者にとって分かりづらいですが、そこは運用でカバーしましょう。
各言語コードは以下のテクニカルリファレンスを参照してください。
マイクロソフト社 TechNet テクニカルリファレンス:SharePoint Server 2013 の言語検索機能(外部リンク) |
列が追加できたら、この列を管理プロパティに紐付けるために、何でもいいので値を入れてから検索エンジンにクロールさせます。
下図の例ではサンプルドキュメントすべてに値を入れてみていますが、実際には一つでも大丈夫です。
※"管理プロパティ"ってナニ?…と言う方は、こちらのTipsをご一読ください。
さて、新規追加した「Lang」列が初めてクロールされると、[サーバーの全体管理]>[アプリケーション構成の管理]>[サービスアプリケーションの管理]>[検索サービスアプリケーション(Search Service Application
など)]>[検索スキーマ]>[クロールされたプロパティ]にて、下図のように収集されたことが分かります。
※SharePoint 2010では、列を最初に日本語などのマルチバイト文字列で作成した場合、判読できない文字列にエンコードされているので注意してください。
これら"クロールされたプロパティ"を、以下いずれかの手順で管理プロパティ「language」にマッピングします。
-
管理プロパティの「language」の編集画面にて、[クロールされたプロパティへのマッピング]>[マッピングの追加]から「ows_Lang」および「ows_q_CHCS_Lang」を選択。選択肢を「指定の順序に基づいて、クロールされた空でない最初のプロパティからコンテンツを取り込む」に変更し、下図のように順番を変更します。(「ows_ProductCatalogLanguageTag」は既定で存在するプロパティ)
-
クロールされたプロパティの「ows_Lang」および「ows_q_CHCS_Lang」の編集画面にて、[管理プロパティへのマッピング]>[マッピングの追加]から「language(テキスト)」を選択。その後で、上記手順と同様に、管理プロパティ「language」の編集画面にて、並び替えをします。
※列をテキスト型で作成した場合、片方のクロールされたプロパティは「ows_q_TEXT_Lang」となります。
ご参考まで、ちなみに弊社環境では「ows_q_CHCS_Lang」の方のクロールされたプロパティをマッピングしなくても、期待する動作となりました。
マッピングが完了したら、以下いずれかの手順で再度クロールし直します。
- サーバーの全体管理の検索サービスアプリケーションにて「インデックスのリセット」してから、クロール。
- 対象サイトの設定から、[検索とオフラインでの使用制限]内の「サイトインデックスの再作成」を実行してから、クロール。
- 対象ライブラリ/リストの設定から、[詳細設定]内の「ドキュメントライブラリ(リストの)インデックスの再作成」を実行してから、クロール。
これで設定は完了です。結果を見てみましょう。
下図のとおり、追加した「Lang」列の内容が管理プロパティ「language」にマッピングされ、検出言語(DetectedLanguage)も意図した言語になっていることが分かります。
では、ブラウザ言語設定が日本語の状態で「焼肉定食」で検索してみると…以前は日本語(ja)と判断された6件しか見つからなかったのに対して、ちゃんとすべて(12件)のドキュメントが見つかりました。もちろん、ブラウザ言語を英語や中国語に変更して同じ検索をしても、期待通り何も見つかりません。
手順は以上です。如何でしたか?
-----
ワードブレイク問題に関しては他にもいくつか解決策がありますので、以下もあわせてご参照ください。
-
[SharePoint 2010] ワードブレーカーを無効にする。
マイクロソフト社 TechNet Blogs:ひとの検索で期待する検索結果が得られない(外部リンク)
ただし、SharePoint 2013でも同じ設定変更をすることは可能なのですが、弊社環境では無効にならずに、誤ったワードブレーカーが使用される現象が見受けられました。SharePoint 2013でも実現できた方がいらっしゃったら、是非教えていただきたいです。
-
ワードブレーカーを置き換える。
マイクロソフト社 Office デベロッパー センター:SharePoint Server 2013 のカスタム ワード ブレーカー(外部リンク)
-----
弊社(株式会社PFU)では、自社で培ったSharePoint&文書管理のノウハウと、SharePoint向けアドオンソリューション「ドキュメントソリューション for SharePoint」で、紙文書・電子データの積極的活用を実現するお手伝いをしています。ご興味のある方は、こちらからお問い合わせ下さい。
株式会社PFU)千葉辰典
© PFU LIMITED 2015
Microsoft、Windows、SharePoint、Excel、Word、PowerPoint、Outlookは、米国Microsoft Corporationの、米国、日本およびその他の国における登録商標または商標です。
記載された会社名および製品名は各社の商標または登録商標です。
以上。