前回の記事では、日本語トークナイザーとストップワードの設定方法を解説しました。
今回は、さらに日本語の検索性を上げるべくユーザートークンの適用方法を解説していきます。
デフォルトの検索性の確認
実際に検索性を向上させる前に、デフォルトの検索性がどうなっているか、サンプルを見ておきましょう。
画像の例では「クレジットカード」で検索しています。
「クレジットカードの決済フロー」の記事がヒットしているのがわかると思います。
では次に、「クレジット」「カード」でそれぞれ検索してみます。
「クレジットカードの決済フロー」のナレッジ記事が表示されていませんね。
何も設定を加えていないZing検索エンジンは語彙力が低いため、登録されていない単語を分解できないのです。
これを解決するために、実際にユーザートークンを適用していきましょう。
ユーザートークンの適用
kuromojiについて
本題に入る前に、少しだけ検索について細かい説明をしておきます。
ServiceNowは、日本語の形態素解析エンジンにkuromojiを採用しています。
kuromojiの形態素解析により文章が要素ごとに分解されます。
抽出された要素と、前回の記事で設定したストップワードを組み合わせて、検索クエリを発行しているのです。
要素 | 名詞 | 助詞 | 名詞 | 助動詞 | 記号 |
文章 | 本日 | は | 晴天 | なり | 。 |
しかし、優れた機能を有したこのkuromojiにも弱点があります。
それは、ServiceNowの標準辞書では利⽤頻度の低いカタカナが組み合わさった単語を抽出できないということです。
例を見てみましょう。
「サービスカタログ」という文章は、ServiceNowでは頻発して使われます。
さらに、ServiceNowでは「サービス」と「カタログ」もそれぞれ利用頻度の高い単語です。
そのため、検索ボックスに「サービス」のみ入力しても「サービスカタログ」が検索結果にヒットします。
kuromojiの解析結果は次の表のようになります。
要素 | 名詞 | 名詞 |
文章 | サービス | カタログ |
次に、「インプリメンテーションサービスカタログ」という文章を検索ボックスに入力したとします。
「サービスカタログ」「サービス」「カタログ」は、それぞれ利用頻度の高い単語ですが、ServiceNow上では「インプリメンテーション」という単語が、利用頻度が低いため独立した単語であることを認識できません。
「インプリメンテーションサービスカタログ」が一つの固有名詞だと認識し、「サービス」や「カタログ」と検索しても検索結果にヒットしないのです。
kuromojiの解析結果は次の表のようになります。
要素 | 名詞 |
文章 | インプリメンテーションサービスカタログ |
プロパティの設定
では、いよいよここからユーザートークンの設定に入っていきます。
その前に、新しくプロパティを作成する必要があります。
フィルターナビゲーターに、sys_properties.listと入力しEnterキーを押します。
システムプロパティのリストが開くので、新規をクリックし、下記の値をそれぞれ入力したら送信をクリックします。
- 名前:glide.ts.japanese.enable.user_dictionary
- タイプ:はい|いいえ
- 値:true
システムプロパティの設定は以上で完了です!
日本語ユーザートークンの登録
ユーザートークンとは、言ってしまえばユーザー辞書です。
ServiceNowにも、ユーザー辞書を登録できるテーブルが存在します。
フィルターナビゲーターに、ts_japanese_token_dictionary.listと入力しEnterキーを押します。
日本語のユーザートークンのリストが開きますが、デフォルトでは何も登録されていません。
登録したい単語を一つ一つ登録していきましょう。
新規をクリックします。
「テキスト」と「トークン」には同じ単語を入力します。要素まで細かく管理したい場合は、品詞に名詞や動詞などを入れても大丈夫です。
入力が完了したら送信をクリックします。
私は今回、サンプルのために「クレジット」と「カード」を登録しました。
日本語ユーザートークンの登録は以上で完了です!
テキストインデックスの再生成
テキストインデックスを再生成することで、変更を反映できます。
日本語ユーザートークンの登録が終わったら、必ずテキストインデックスを再生成しましょう。
テキストインデックスの再生成手順については、前回の記事でもまとめています。
リンクを踏むのが面倒な方もいると思うので、こちらでも再度ご説明しますね。
メニューから、システム定義 > テキストインデックスを開きます。
ユーザートークンの登録を反映させたいテーブルを検索し、レコードを開きます。
関連リンクの、テキストインデックスの再生成をクリックします。
再生成が完了した際に、メールで通知するかを確認するポップアップが表示されます。
お好みの設定でOKをクリックします。
あとはテキストインデックスの再生成を待つのみです!
ちなみに、テキストインデックスの再生成が完了したかどうかを確認する方法ですが、メニューから、システムポリシー > Events > イベントログを開きます。
「名前」は次の値で始まる「text_index.」で検索すると、テキストインデックスに関するログのみフィルタリングできます。
text_index.allがテキストインデックスの再生成が始まった合図です。
text_index.completeがテキストインデックスの再生成が完了した合図です。
パラメータ1に表示されているテーブル名が、テキストインデックスの再生成を行っている、または完了したテーブルです。
※sysmetadataなど、テーブルによっては再生成にn時間単位を要するものもあるのでご注意ください。
テキストインデックスの再生成が完了したら、ユーザートークンに関わる日本語の検索性の向上対応は完了です!
対応後の検索性の確認
では、デフォルトの検索性の確認で、「クレジット」「カード」で検索できなかった「クレジットカードの決済フロー」が、実際に検索できるかを確認してみましょう。
それぞれ検索してみると……
うまく検索結果に表示されていますね!
まとめ
今回は、ユーザートークンを設定して検索性を向上させる方法をご紹介しました。
ポイントとしては以下の通りになります。
- 初回の場合は、システムプロパティを作成し有効化する
- よく利用するワードをユーザー辞書に登録する
- 上二つの設定を行った後は必ずテキストインデックスの再生成を行う
ユーザー辞書を登録することで、検索性はかなり向上すると思います!
次回もまた違ったやり方で検索性を向上させる方法を紹介しますね!
コメント