null+****@clear*****
null+****@clear*****
2011年 9月 13日 (火) 17:57:54 JST
Daijiro MORI 2011-09-13 08:57:54 +0000 (Tue, 13 Sep 2011)
New Revision: 4b227112c58153d5340dd633b5c430fd11207b8f
Log:
added documents of query_expand parameter
Added files:
doc/source/example/tutorialqe-1.log
doc/source/example/tutorialqe-2.log
doc/source/example/tutorialqe-3.log
doc/source/tutorial/tutorialqe.txt
Modified files:
doc/source/commands/select.txt
Modified: doc/source/commands/select.txt (+5 -1)
===================================================================
--- doc/source/commands/select.txt 2011-09-09 06:02:55 +0000 (e9c2729)
+++ doc/source/commands/select.txt 2011-09-13 08:57:54 +0000 (621c50c)
@@ -17,7 +17,7 @@ select - テーブルの中から条件にマッチするレコードを検索
select table [match_columns [query [filter [scorer [sortby [output_columns
[offset [limit [drilldown [drilldown_sortby [drilldown_output_columns
[drilldown_offset [drilldown_limit [cache
- [match_escalation_threshold]]]]]]]]]]]]]]]
+ [match_escalation_threshold [query_expand]]]]]]]]]]]]]]]]
説明
----
@@ -177,6 +177,10 @@ a - b
クエリのヒット件数が閾値を越えない場合は :doc:`/spec/search` で説明している方法で検索方法をエスカレーションしてきます。
+``query_expand``
+
+ queryパラメータに指定された文字列を、置換(拡張)する条件を与えるテーブルとそのカラムを、「テーブル名.カラム名」という形式で設定します。指定するテーブルは文字列を主キーとするハッシュ型あるいはパトリシア木型のテーブルで、一つ以上の文字列型のカラムが定義されている必要があります。(ここでは置換テーブルと呼びます)。queryパラメータに指定された文字列が、指定されたテーブルの主キーと完全一致する場合、その文字列を指定されたカラム値の文字列に置換します。queryパラメータが、空白、括弧、演算子などを含む場合は、その演算子によって区切られた文字列の単位で置換が実行されます。ダブルクォート("")で括られた範囲は、その内部に空白を含んでいても一つの置換される単位と見なされます。検索
文字列と置換テーブルの主キー値との比較に際して大文字小文字等を区別したくない場合には、置換テーブルを定義する際にKEY_NORMALIZEを指定します。置換後の文字列となるカラムの値には、括弧や*, ORなど、queryパラメータで利用可能な全ての演算子を指定することができます。
+
返値
----
Added: doc/source/example/tutorialqe-1.log (+26 -0) 100644
===================================================================
--- /dev/null
+++ doc/source/example/tutorialqe-1.log 2011-09-13 08:57:54 +0000 (c3d483e)
@@ -0,0 +1,26 @@
+実行例 ::
+
+ > table_create Doc TABLE_PAT_KEY ShortText
+ > column_create Doc body COLUMN_SCALAR ShortText
+ > table_create Term TABLE_PAT_KEY|KEY_NORMALIZE ShortText --default_tokenizer TokenBigram
+ > column_create Term Doc_body COLUMN_INDEX|WITH_POSITION Doc body
+ > table_create Synonym TABLE_PAT_KEY ShortText
+ > column_create Synonym body COLUMN_SCALAR ShortText
+ > load --table Doc
+ > [
+ > {"_key": "001", "body": "すっぱいブドウと甘いシークァーサー"},
+ > {"_key": "002", "body": "シークヮーサージュースとゴーヤチャンプル"},
+ > ]
+ > load --table Synonym
+ > [
+ > {"_key": "シークァーサー", "body": "(シークァーサー OR シークヮーサー)"},
+ > {"_key": "シークヮーサー", "body": "(シークァーサー OR シークヮーサー)"},
+ > ]
+ [[0,1315902793.79405,0.067835793],true]
+ [[0,1315902793.86204,0.055032625],true]
+ [[0,1315902793.91716,0.033071456],true]
+ [[0,1315902793.95031,0.084515422],true]
+ [[0,1315902794.03489,0.039670759],true]
+ [[0,1315902794.07463,0.047553673],true]
+ [[0,1315902794.12225,0.030597533],2]
+ [[0,1315902794.15293,0.001469182],2]
Added: doc/source/example/tutorialqe-2.log (+6 -0) 100644
===================================================================
--- /dev/null
+++ doc/source/example/tutorialqe-2.log 2011-09-13 08:57:54 +0000 (0e3de9b)
@@ -0,0 +1,6 @@
+実行例 ::
+
+ > select Doc --match_columns body --query "シークァーサー"
+ > select Doc --match_columns body --query "シークヮーサー"
+ [[0,1315902890.34086,0.001523795],[[[1],[["_id","UInt32"],["_key","ShortText"],["body","ShortText"]],[1,"001","すっぱいブドウと甘いシークァーサー"]]]]
+ [[0,1315902896.11284,0.00103016],[[[1],[["_id","UInt32"],["_key","ShortText"],["body","ShortText"]],[2,"002","シークヮーサージュースとゴーヤチャンプル"]]]]
Added: doc/source/example/tutorialqe-3.log (+6 -0) 100644
===================================================================
--- /dev/null
+++ doc/source/example/tutorialqe-3.log 2011-09-13 08:57:54 +0000 (8f12757)
@@ -0,0 +1,6 @@
+実行例 ::
+
+ > select Doc --match_columns body --query "シークァーサー" --query_expand Synonym.body
+ > select Doc --match_columns body --query "シークヮーサー" --query_expand Synonym.body
+ [[0,1315903097.36968,0.007449833],[[[2],[["_id","UInt32"],["_key","ShortText"],["body","ShortText"]],[1,"001","すっぱいブドウと甘いシークァーサー"],[2,"002","シークヮーサージュースとゴーヤチャンプル"]]]]
+ [[0,1315903109.46887,0.001223129],[[[2],[["_id","UInt32"],["_key","ShortText"],["body","ShortText"]],[1,"001","すっぱいブドウと甘いシークァーサー"],[2,"002","シークヮーサージュースとゴーヤチャンプル"]]]]
Added: doc/source/tutorial/tutorialqe.txt (+57 -0) 100644
===================================================================
--- /dev/null
+++ doc/source/tutorial/tutorialqe.txt 2011-09-13 08:57:54 +0000 (5ba2705)
@@ -0,0 +1,57 @@
+.. -*- rst -*-
+
+.. highlightlang:: none
+
+selectコマンドのquery_expandパラメータの使い方
+==============================================
+
+groongaでは、selectコマンドにquery_expandパラメータを指定することによって、ユーザが指定した検索文字列を適宜拡張することが可能です。
+
+たとえば、ユーザが'シークヮーサー'という文字列で検索した場合に、'シークヮーサー OR シークァーサー'で検索した場合と同一の結果を返すことによって、本来ユーザが必要とする結果をよりもれなく検索できるようになります。
+
+準備
+----
+
+query_expand機能を使用するためには、検索対象となる文書を格納するテーブル(ここでは文書テーブルと呼びます)以外に、ユーザの指定した検索文字列を置換するためのテーブル(ここでは置換テーブルと呼びます)を準備します。置換テーブルでは、その主キーが置換前の文字列となり、文字列型(ShortText等)のカラムの値が置換後の文字列となります。
+
+実際に文書テーブルと置換テーブルを作成してみましょう。
+
+.. groonga-command
+.. include:: ../example/tutorialqe-1.log
+.. table_create Doc TABLE_PAT_KEY ShortText
+.. column_create Doc body COLUMN_SCALAR ShortText
+.. table_create Term TABLE_PAT_KEY|KEY_NORMALIZE ShortText --default_tokenizer TokenBigram
+.. column_create Term Doc_body COLUMN_INDEX|WITH_POSITION Doc body
+.. table_create Synonym TABLE_PAT_KEY ShortText
+.. column_create Synonym body COLUMN_SCALAR ShortText
+.. load --table Doc
+.. [
+.. {"_key": "001", "body": "すっぱいブドウと甘いシークァーサー"},
+.. {"_key": "002", "body": "シークヮーサージュースとゴーヤチャンプル"},
+.. ]
+.. load --table Synonym
+.. [
+.. {"_key": "シークァーサー", "body": "(シークァーサー OR シークヮーサー)"},
+.. {"_key": "シークヮーサー", "body": "(シークァーサー OR シークヮーサー)"},
+.. ]
+
+この例では、ユーザが"シークァーサー"と入力しても、"シークヮーサー"と入力しても、それぞれの異なる表記の文書をもれなく検索するための置換テーブルを作成しています。
+
+検索
+----
+
+それでは実際に、準備した置換テーブルを使ってみましょう。まずは、query_expandパラメータを指定せずにselectコマンドを使って検索してみます。
+
+.. groonga-command
+.. include:: ../example/tutorialqe-2.log
+.. select Doc --match_columns body --query "シークァーサー"
+.. select Doc --match_columns body --query "シークヮーサー"
+
+指定された文字列に完全に一致するレコードのみがそれぞれヒットします。次に、query_expandパラメータに、準備したSynonymテーブルのbodyカラムを指定してみましょう。
+
+.. groonga-command
+.. include:: ../example/tutorialqe-3.log
+.. select Doc --match_columns body --query "シークァーサー" --query_expand Synonym.body
+.. select Doc --match_columns body --query "シークヮーサー" --query_expand Synonym.body
+
+どちらのクエリ文字列も、"(シークァーサー OR シークヮーサー)"という文字列に置換されてから検索されるため、表記の揺れを吸収して検索できるようになりました。