ワード ブレーカーのユーザー辞書を作成する


SharePoint Server 2013 で、どうしてもワード ブレーカーのユーザー辞書を作成したくなる場面と、その場合の手順を記載します。

ユーザー辞書を作成したい場面

例えば、ある企業で「ラスクローセンサー」という名前の商品を販売するとします (適当な架空の名称です)。これを、「ラスクローセンサー」や「センサー」といった検索キーワードで検索したい、という場合には何ら問題ありません。うまくいかないのは、「ラスクロー」で検索したい場合です。

なぜ、うまく検索できないのか

日本語用のワード ブレーカーは、厳密には前後の文字列によって変わりますが、「ラスクローセンサー」だけの文字列は「ラスク」「ロー」「センサー」と分割してから検索インデックス (“インデックス” といっても、RDBMS のインデックスとは全く異なります) に格納します。

同様に、検索キーワードも日本語のワード ブレーカーで分割しますが、「ラスクロー」は「ラスク」「ロー」ではなく、「ラス」「クロー」と分割するものと判断されます。これが、正に上記で『厳密には前後の文字列によって変わります』と記載した現象です。

検索インデックスを作成する際と、検索キーワードを投げる際の分割する場所が異なるため、うまく検索できないという結果になっています。

こんなこと、よく起きるの?

いいえ。
上記に記載した例のように、検索対象の文章と、検索キーワードで分割する箇所が分かれるということは、ほとんどのケースでは発生しませんが、日本語のように空白で単語が区切られていない言語で、今回のケースのような片仮名や漢字だけが連続する場合に発生する可能性が少しですがあります。

この現象は、ワード ブレーカーのような文章の意味を考えながら、適切と思われる箇所で分割するという「解析器」を用いて処理を行う場合、ほぼ間違いなく発生する可能性を含んでいます。形態素解析器と呼ばれるものの多くも同様です。

では、どう対応するのか

いくつかの方法があるのですが、ここでは、日本語のワード ブレーカー用にユーザー辞書を作成して、分割する箇所を明示してあげよう、という方法です。「ラスクロー」という文字列は、「ラスク」「ロー」や「ラス」「クロー」ではなく、必ず (分割せずに) 「ラスクロー」と処理させるわけです。

それでは、実際の手順を

TechNet ライブラリの SharePoint Server 2010 の記述を参考にしてください。一部、読み替える個所があるため、以下に列挙します。

  1. 以下の内容が含まれたテキスト ファイルを作成し、文字コードを [Unicode] (= UCS-2 Little Endian) で、ファイル名を「Custom0011.lex」として保存します。なお、メモ帳で作成した場合には注意する必要はありませんが、改行コードは [CR]+[LF] を利用してください。また、ファイル名の大文字・小文字にも注意してください
    ラスクロー
  2. 上記で作成した Cusom0011.lex ファイルを %ProgramFiles%\Microsoft Office Servers\15.0\Bin フォルダにコピーします
  3. サービスから、[SharePoint Timer Service]、[SharePoint Server Search 15]、[SharePoint Search Host Controller] の順番でサービスを停止します
  4. サービスから、[SharePoint Search Host Controller]、[SharePoint Server Search 15]、[SharePoint Timer Service] の順番にサービスを起動します
  5. 検索対象のアイテムが既にクロールされた状態の場合にはフル クロールを、これからクロールする場合には、フル クロールまたは差分クロール (または継続的クロール) を実施します
  6. 検索サイトで、期待する検索キーワードで検索し、期待通りの結果になれば完了です
    image

ユーザー辞書を作成する (SharePoint Server 2010)
http://technet.microsoft.com/ja-jp/library/cc263242.aspx

広告