null+****@clear*****
null+****@clear*****
2010年 9月 20日 (月) 12:11:15 JST
Daijiro MORI 2010-09-20 03:11:15 +0000 (Mon, 20 Sep 2010) New Revision: 497c9526660132694d43126b44a867eda7abbff1 Log: Added explanation of "exact match" to search.txt. Modified files: doc/ja/source/search.txt Modified: doc/ja/source/search.txt (+47 -6) =================================================================== --- doc/ja/source/search.txt 2010-09-19 12:23:14 +0000 (2ec8b16) +++ doc/ja/source/search.txt 2010-09-20 03:11:15 +0000 (bed700f) @@ -21,9 +21,50 @@ ref:`select` コマンドがqueryパラメータを使ってどのように検 完全一致検索 ++++++++++++ -完全一致検索はキーワードに完全一致するレコードを検索します。 +検索対象文書は複数の語彙にトークナイズ(分割)され、それぞれを単位とした語彙表に索引を管理します。 +検索キーワードも同一の方法でトークナイズされます。 -例えば、「bill」というキーワードで検索した場合、「bill」はヒットしますが、「billiard」はヒットしません。 +このとき、検索キーワードをトークナイズした結果得られる語彙の配列と同一の配列を含む文書を検索する処理を完全一致検索と呼んでいます。 + +たとえば、TokenMecabトークナイザを使用した索引では「東京都民」という文字列は + + 東京 / 都民 + +という二つの語彙の配列として格納されます。この索引に対して「東京都」というキーワードで検索した時、このキーワードは、 + + 東京 / 都 + +という二つの語彙の配列として処理されます。この語彙の並びは、「東京 / 都民」という語彙の並びには一致しませんので、完全一致検索ではヒットしません。 + +これに対して、TokenBigramトークナイザを使用した索引では「東京都民」という文字列は + + 東京 / 京都 / 都民 / 民 + +という四つの語彙の配列として格納されます。この索引に対して「東京都」というキーワードで検索した時、このキーワードは、 + + 東京 / 京都 + +という二つの語彙の配列として処理されます。この語彙の並びは、「東京 / 京都 / 都民」という語彙の並びに含まれますので、完全一致検索でヒットします。 + +なお、TokenBigramトークナイザでは、アルファベット・数値・記号文字列についてはbigramを生成せず、一つの連続したトークンとして扱います。たとえば、「楽しいbilliard」という文字列は、 + + 楽し / しい / billiard + +という三つの語彙の配列として格納されます。これに対して「bill」というキーワードで検索した時、このキーワードは、 + + bill + +という一つの語彙として処理されます。この語彙の並びは「楽し / しい / billiard」という語彙の並びには含まれないので、完全一致でヒットしません。 + +これに対して、TokenBigramSplitSymbolAlphaトークナイザではアルファベット文字列についてもbigramを生成し、「楽しいbilliard」という文字列は、 + + 楽し / しい / いb / bi / il / ll / li / ia / ar / rd / d + +という十一の語彙の配列として格納されます。これに対して「bill」というキーワードで検索した時、このキーワードは、 + + bi / il / ll + +という三つの語彙として処理されます。この語彙の並びは「楽し / しい / いb / bi / il / ll / li / ia / ar / rd / d」という語彙の並びに含まれるので、完全一致でヒットします。 非わかち書き検索 ++++++++++++++++ @@ -59,15 +100,15 @@ TokenMeCabトークナイザーの場合はわかち書き後のキーワード 検索の使い分け -------------- -基本的に完全一致検索のみを行います。完全一致検索で1件もヒットしない場合に限り、非わかち書き検索を行い、それでも1件もヒットしない場合は部分一致検索を行います。 +groongaは基本的に完全一致検索のみを行います。完全一致検索でのヒット件数が所定の閾値を超えない場合に限り、非わかち書き検索を行い、それでもヒット件数が閾値を超えない場合は部分一致検索を行います。(閾値は1がデフォルト値となっています) -ただし、すでに検索結果セットが存在する場合はたとえ1件もヒットしなくても完全一致検索のみを行います。 +ただし、すでに検索結果セットが存在する場合はたとえヒット件数が閾値に満たなくても完全一致検索のみを行います。 -例えば、以下のようなクエリの場合は、それぞれの検索で1件もヒットしない場合は完全一致検索、非わかち書き検索、部分一致検索を順に行います。 +例えば、以下のようなクエリの場合は、それぞれの検索でヒット件数が閾値に満たない場合は完全一致検索、非わかち書き検索、部分一致検索を順に行います。 select Shops --match_column description --query スープカレー -しかし、以下のように全文検索を行う前に検索結果セットが存在する場合は完全一致検索のみを行います。(point > 3で1件以上ヒットしている場合) +しかし、以下のように全文検索を行う前に検索結果セットが存在する場合は完全一致検索のみを行います。(point > 3で閾値の件数以上ヒットしている場合) select Shops --filter '"point > 3 && description @ \"スープカレー\""'