サイトウさんには 斉藤、斎藤、齋藤、齊藤 などの表記バリエーションがあります。
(「藤」の方もいろいろあるようですがが、ここは一旦「斉」のみで)
一番メジャーな「斉藤」で検索して「斉藤」、「斎藤」、「齋藤」、「齊藤」 全てがヒットすると、検索サービス的にはカッコいい感じです。
「Apache Solr 入門」に MappingCharFilterFactory を用いた対処方法が書いてあったので試してみました。
これは下記の様に変換ルールを書いたテキストファイルを用意することで、Solrが文字の置換をしてくれるというものです。
"齋" => "斉" "斎" => "斉" "齊" => "斉"
この設定は付属のサンプルデータに含まれています。
schema.xml の fieldTypeの設定に下記を追記することで適用されます。
気になったのは
- 「斉藤」で検索して「斎藤」がヒットするのはうれしい
- だけど、検索結果として表示される文字列が 「斉藤」 に変わっているのはイヤだ。人名のようなデリケートなデータはオリジナルの状態のまま表示されて欲しい。単純に文字列置換されているようだとダメ。
- 逆に「齋藤」で検索しても「斉藤」 がヒットする?
- ハイライタはちゃんと効くのか?
というようなことです。
付録のサンプルデータをちょっと編集して、試してみました。
結果は
- 「斉藤」で検索して「斎藤千和」がヒットしましたが
- 表示はちゃんとオリジナルの「斎藤千和」のママでした
- 「齋藤」で検索しても「斉藤」、「斎藤」、「齋藤」、「齊藤」 全てがヒットしました
- ハイライタもバッチリ適応されてました。
まさしく期待していた通りの結果でした。
文字単位に変換する場合には、シノニムよりも MappingCharFilterFactory の方がよさそうです。
サンプルデータには 「郄」(いわゆるハシゴ高)や「邉」等の置換も含まれているので、人名が検索対象になっているサービスを作る場合には、参考になることが多そうです。