最近、IM-ContentsSearchの導入事例が増えてきており、以下のようなご質問を受けることが多くなって来ました。
Q:IM-ContentsSearchで「あいまい検索」は可能でしょうか。
例)
1. 全角カタカナ⇔半角カタカナ
2. 全角英数⇔半角英数
3. 英大文字⇔英小文字
4. 表記揺れ
(ⅰ) ユーザ、ユーザー
(ⅱ) ブ・ヴ、ヂ・ジ
(ⅲ) ヰ、ゑ、いすゞ
5. 同義語
--- 以下回答 ---
IM-ContentsSearchの標準設定では実現できませんが、Solrに設定されている
テキストフィールド(text_ngramやtext_morph)をカスタマイズする事で、一部の機能が実現可能になります。
- 全角カタカナ⇔半角カタカナ
- 全角英数⇔半角英数
IM-ContentsSearch Ver.7.1では実現できません。
IM-ContentsSearch Ver.7.2をご利用の場合は、MappingCharFilterFactoryを利用することで実現可能です。
このFilterは単純にテキストを置換するだけのものなので、それぞれの変換ルールを設定ファイルを定義する必要があります。また、「表記揺れ」や「同義語」に対応するためには、形態素解析を利用する必要があります。
基本的には、すべて全角に変換
半角→全角
ア=>ア
ガ=>ガ
プ=>プ
全角→半角
A=>A
記号→全角カナ
㌔=>キロ
㌘=>グラム
- 英大文字⇔英小文字
LowerCaseFilterFactoryを利用することで実現可能です。
MappingCharFilterFactoryの後に定義して下さい。表記揺れ
(ⅰ) ユーザ、ユーザー
PatternReplaceFilterFactoryを利用することで実現可能です。このFilterは正規表現を用いてトークンを置換する事が可能です。
pattenの定義に例えば、4文字目以降の最後の「ー」を削除するような正規表現を記述することで対応して下さい。(ⅱ) ブ・ヴ、ヂ・ジ
先述のMappingCharFilterFactoryで実現可能です。(ⅲ) ヰ、ゑ、いすゞ
ヰ・ゑに関しては先述のMappingCharFilterFactoryで実現可能です。
いすゞに関しては繰り返し文字を判定することは出来ませんが、5.の同音異義語と同様に辞書に登録することで特定の単語であれば対応可能です。
- 同義語
SynonymFilterFactoryを利用することで実現可能です。
同義語の定義はテキストファイルに設定する必要があります。
詳しくは、Apache Solr公式のWikiページ(英語)をご覧下さい。
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
※ 各機能の導入バージョンにご注意下さい。製品とバージョンの対応は以下になります。
IM-ContentsSearch Ver.7.1 => solr 1.3
IM-ContentsSearch Ver.7.2 => solr 1.4.1
以上、ご参考にしてください。