検索アナライザー
IBM® Cloudant® for IBM Cloud® Searchは、 Apache Luceneを搭載した IBM Cloudant データベースに組み込まれたフリーテキスト検索技術です。
IBM Cloudant 検索索引を作成するときには、文書のどのフィールドに索引付けが必要なのかと、どのように索引付けするべきかを検討する必要があります。
索引付けプロセスの 1 つの側面は、アナライザーの選択です。 アナライザーとは、以下のような作用を持つことのできるコードです。
- ストリングが必ず小文字になるようにすることで、大/小文字を区別しない検索にする。
- 文を個々の語に分割することによって、ストリングをトークン化する。
- 言語固有の語末を除去することによって、語を語幹だけにする (例: farmer が farm になる)。
- a、is、if などの語を無視することによって、ストップワードを除去する。これは索引をより小規模かつ効率的にできます。
索引作成時に、ソース・データは、データをソートして索引に保管するアナライザー・ロジックを使用して処理されます。 照会時には、同じアナライザー・コードを使用して検索語が処理された後、索引の検索が行われます。
アナライザーのテスト
各アナライザーの効果を確認するには、組み込み Lucene アナライザーのいずれかに適用される IBM Cloudant 検索 API 呼び出しを、何らかのストリングを指定して使用します。
各アナライザーを順に調べるため、各アナライザーに次のストリングを渡して効果を測定します。
"My name is Chris Wright-Smith. I live at 21a Front Street, Durham, UK - my email is chris7767@aol.com."
Standard アナライザー
standard
アナライザは、以下の方法で文字列を変更します
- 句読点を除去します。
- スペースと句読点に基づいて語を分割します。
- ストップワード (「is」と「at」を含む) を除去します。
- 小文字に使用する語を変更します。
- 「aol.com"aol.com」はそのままです。
{"tokens":["my","name","josé","wright","smith","i","live","21a","front","street","durham","uk","my","email","jose7767","aol.com"]}
Keyword アナライザー
keyword
アナライザーを使用すると、文字列はそのままの状態を保ちます。 以下の例を参照してください。
{"tokens":["My name is José Wright-Smith. I live at 21a Front Street, Durham, UK - my email is jose7767@aol.com."]}
Simple アナライザー
simple
アナライザは、以下の方法で文字列を変更します
- 句読点を除去します。
- スペースと句読点に基づいて語を分割します。
- ストップワードは除去されません (「is」と「at」があります)。
- 小文字に使用する語を変更します。
jose7767
がjose
に、21a
がa
に変更されることに注目してください。
{"tokens":["my","name","is","josé","wright","smith","i","live","at","a","front","street","durham","uk","my","email","is","jose","aol","com"]}
シンプルなASCIIフォールディングアナライザー
simple_asciifolding
アナライザは、以下の方法で文字列を変更します
- 句読点を除去します。
- スペースと句読点に基づいて語を分割します。
- ストップワードは除去されません (「is」と「at」があります)。
- 小文字に使用する語を変更します。
- ASCII以外の文字を、最も近いASCII文字に変換します。
- 例えば、
José
はjose
になります。
{"tokens":["my","name","is","jose","wright","smith","i","live","at","a","front","street","durham","uk","my","email","is","jose","aol","com"]}
Whitespace アナライザー
whitespace
アナライザは、以下の方法で文字列を変更します
- 一部の句読点を除去します。
- スペースに基づいて語を分割します。
- ストップワードは除去されません (「is」と「at」があります)。
- 語は大/小文字の区別ありのままです。
- E メールはそのままです。
{"tokens":["My","name","is","José","Wright-Smith.","I","live","at","21a","Front","Street,","Durham,","UK","-","my","email","is","jose7767@aol.com."]}
Classic アナライザー
classic
アナライザは、以下の方法で文字列を変更します
- 句読点を除去します。
- スペースと句読点に基づいて語を分割します。
- ストップワードを除去します (「is」と「at」なし)。
- 小文字に使用する語を変更します。
- E メールはそのままです。
{"tokens":["my","name","josé","wright","smith","i","live","21a","front","street","durham","uk","my","email","jose7767@aol.com"]}
English アナライザー
english
アナライザは、以下の方法で文字列を変更します
- 句読点を除去します。
- スペースと句読点に基づいて語を分割します。
- Porter Stemmingアルゴリズムを使用して単語 の語幹を生成します (例えば、
fishing
はfish
になります)。 - ストップワードを除去します (「is」と「at」なし)。
- 小文字に使用する語を変更します。
{"tokens":["my","name","josé","wright","smith","i","live","21a","front","street","durham","uk","my","email","jose7767","aol.com"]}
言語固有のアナライザーは、ソース・データに最も変更を加えます。 english
アナライザーを使用した次の2つの例をご覧ください
The quick brown fox jumped over the lazy dog.
{"tokens":["quick","brown","fox","jump","over","lazi","dog"]}
Four score and seven years ago our fathers brought forth, on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.
{"tokens":["four","score","seven","year","ago","our","father","brought","forth","contin","new","nation","conceiv","liberti","dedic","proposit","all","men","creat","equal"]}
選択すべきアナライザー
それはデータによって異なります。 データが構造化されて個別のフィールドに入っている場合は (E メール・アドレス、郵便番号、名前など)、検索が必要なデータが保持されるアナライザーを選択してください。
必要なフィールドのみを索引付けしてください。 索引を小さくしておくと、パフォーマンスの向上に役立ちます。
一般的なデータ・ソースを検討し、最適なアナライザーの選び方を確認します。
名称
多くの場合、名前フィールドが使用するアナライザーは語を語幹にしないものである必要があります。 whitespace
アナライザーは単語の大文字と小文字を区別し(つまり、検索語は完全に一致する大文字と小文字を区別したものでなければならない)、2つの単語からなる語句はそのままにします。 2つの単語からなる名前を分割したい場合は、 standard
アナライザーがその作業を行います。
E メール・アドレス
この目的には、組み込みの email
アナライザーが役立ちます。このアナライザーは、すべてを小文字に変換し、キーワードアナライザーと同様に動作します。
固有 ID
注文番号、支払い参照、 "A1324S",、 "PayPal0000445",、" ABC-1412-BBG "などのUUIDは、事前処理を行わずに保持する必要があるため、 keyword
アナライザーが推奨されます。
国別コード
「UK」のような国コードも、 keyword
アナライザーを使用して、国コードに一致する「ストップワード」の削除を防ぐ必要があります。例えば、インドの「IN」などです。 keyword
アナライザーは大文字と小文字を区別します。
テキスト
自由形式のテキストのブロックは、言語固有の分析ツール( english
分析ツールなど)で処理するのが最適です。より一般的なケースでは、 standard
分析ツールを使用します。