索引文字列抽出について
検索のためのインデックスを作成する際、索引として登録するために文書を切り分ける必要があります。
このために使用されるのが、トークナイザーです。
基本的に、トークナイザーによって切り分けられた単位よりも小さいものは、検索を行ってもヒットしません。
例えば、「東京都に住む」という文を考えます。いま、この文が「東京都」「に」「住む」というようにトークナイザーによって分割されたとします。この場合、「東京都」という語で検索を行った場合はヒットします。しかし、「京都」という語で検索を行った場合はヒットしません。
そのためトークナイザーの選択は重要です。
Fess の場合デフォルトでは CJKTokenizer が使用されていますが、schema.xml の analyzer 部分を設定することでトークナイザを変更することができます。
CJKTokenizerについて
CJKTokenizer 日本語のようなマルチバイトの文字列に対しては bi-gram 、つまり二文字ずつインデックスを作成します。この場合、1文字の語を検索することはできません。
StandardTokenizerについて
StandardTokenizer は日本語のようなマルチバイトの文字列に対しては uni-gram 、つまり一文字ずつインデックスを作成します。そのため、検索漏れが少なくなります。また、CJKTokenizerの場合、1文字のクエリを検索することができませんが、StandardTokenizerを使用すると検索可能になります。
下記の例のように schema.xml の analyzer 部分を変更することで、StandardTokenizer を使用できます。
:
<types>
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
: