パターンによる検索では、要素ノードの値、テキストノードの値または属性ノードの値が、パターンで示されるさまざまな条件に合致する文書を検索します。部分的な一致の検索や単語の検索など、複雑な条件を記述して検索することができます。
パターンの定義を以下の図に示します。
図B.8 パターンの定義
パス式で指定した要素ノードの値、テキスト式で指定したテキストノードの値、または属性式で指定した属性ノードの値が、指定されたすべてのパターンを含むかどうかを調べます。
/root/text = '高速&検索'
/root/textが示す要素ノードの値が“高速”および“検索”という文字列を両方含む場合に真となります。
パス式で指定した要素ノードの値、テキスト式で指定したテキストノードの値、または属性式で指定した属性ノードの値が、指定されたいずれかのパターンを含むかどうかを調べます。
/root/text = '高速|検索'
/root/textが示す要素ノードの値が“高速”または“検索”という文字列を含む場合に真となります。
パス式で指定した要素ノードの値、テキスト式で指定したテキストノードの値または属性式で指定した属性ノードの値が、指定されたパターンを含まないかどうかを調べます。
/root/text = '~(高速|検索)'
/root/textが示す要素ノードの値に“高速”という文字列も“検索”という文字列も含まない場合に真となります。
ポイント
パターン検索には、論理積、論理和、否定を組み合わせて使用することができます。このときの評価順序は以下のとおりです。
否定
論理積
論理和
また、括弧(“(”および“) ”)を使用して評価順序を指定することができます。括弧の中の条件は、優先的に評価されます。
要素ノードの値、テキストノードの値または属性ノードの値に、指定されたキーワードが含まれるかどうかを調べます。
/root/text = '富士通'
/root/textが示す要素ノードの値に“富士通”という文字列を含む場合に真となります。
要素ノードの値、テキストノードの値または属性ノードの値の先頭に、指定されたキーワードが存在するかどうかを調べます。
/root/text = '^富士通'
/root/textが示す要素ノードの値の先頭が“富士通”という文字列で始まる場合に真となります。
要素ノードの値、テキストノードの値または属性ノードの値の末尾に、指定されたキーワードが存在するかどうかを調べます。
/root/text = '富士通$'
/root/textが示す要素ノードの値の末尾が“富士通”という文字列である場合に真となります。
要素ノードの値、テキストノードの値または属性ノードの値に、任意の文字が入ったキーワードを含んでいるかどうかを調べます。
キーワードに含む任意の文字の指定には、以下の表の4種類を指定できます。
記号 | 意味 | 連続使用 |
---|---|---|
. | 任意の1文字 | ○ |
.? | 任意の0~1文字 | ○ |
.+ | 任意の1文字以上 | × |
.* | 任意の0文字以上 | × |
○:使用可
×:使用不可
/root/text = '富士.*会社'
/root/textが示す要素ノードの値に“富士”と“会社”という文字列を含み、かつ、その2つの文字列の間の文字数が0文字以上の場合に真となります。
注意
連続使用不可な記号を連続して使用した場合は、構文エラーとなります。
参考
任意文字指定は、自由に組み合わせることができます。任意文字指定の組合せと真偽の例を以下の表に示します。なお、以下の表は比較演算子に“=”を指定した場合の結果です。
キーワード例 | データ例 | |||
---|---|---|---|---|
AB | AXB | AYYB | AZZZB | |
'A.' | ○ | ○ | ○ | ○ |
'A.B' | × | ○ | × | × |
'A.?B' | ○ | ○ | × | × |
'A.+B' | × | ○ | ○ | ○ |
'A.*B' | ○ | ○ | ○ | ○ |
'A..?B' | × | ○ | ○ | × |
'A..+B' | × | × | ○ | ○ |
'A..*B' | × | ○ | ○ | ○ |
'A.?.+B' | × | ○ | ○ | ○ |
'A.?.*B' | ○ | ○ | ○ | ○ |
○:真
×:偽
要素ノードの値、テキストノードの値または属性ノードの値に、指定された2つのキーワードが指定された文字数以内の間隔をおいて連続して出現するかどうかを調べます。
文字間隔指定の数値に指定できる値は、0~1024です。
/root/text = 'アルコール,10C,濃度'
/root/textが示す要素ノードの値に“アルコール”と“濃度”という文字列を含み、かつ、その2つの文字列の間の文字数が10文字以内である場合に真となります。
注意
文字列検索に文字間隔指定は、一度だけ指定することができます。
文字間隔指定の直前または直後に、任意文字指定を記述することはできません。
要素ノードの値、テキストノードの値または属性ノードの値に、指定されたキーワードが含まれるかどうかを調べます。キーワードの一部は、複数の文字列のいずれかで構成されます。
/root/text = '高(田|山|見沢)太郎'
/root/textが示す要素ノードの値に“高田太郎”、“高山太郎”または“高見沢太郎”という文字列を含む場合に真となります。
注意
部分文字指定、文字範囲指定および数値範囲指定の検索を実行する場合には、searcherが多くのメモリを使用することがあります。searcherを配置したサーバに十分なメモリが用意されていない場合には、Shunsakuのシステム全体の検索レスポンスに影響が発生し、場合によってはアプリケーションがタイムアウトエラーを検出することがあります。
部分文字指定、文字範囲指定または数値範囲指定の検索を実行する場合に、使用する最大のメモリサイズは以下の計算で算出可能です。
部分文字の数、文字の範囲または数値の範囲×キーワードの文字数×1キロバイト
部分文字指定、文字範囲指定または数値範囲指定が複数指定されている場合には、各部分文字の数、各文字の範囲または各数値の範囲を乗算した値が、範囲となります。
部分文字指定、文字範囲指定および数値範囲指定を組み合わせて検索を実行する場合には、使用する最大のメモリサイズは以下の計算で算出可能です。
部分文字の数×文字の範囲×数値の範囲×キーワードの文字数×1キロバイト
要素ノードの値、テキストノードの値または属性ノードの値に、指定されたキーワードが含まれるかどうかを調べます。キーワードの一部は、指定された範囲の文字のいずれかで構成されます。
文字1と文字2には、ともに制御文字以外のASCII文字を1文字指定します。指定する場合にはエスケープ文字は付加しません。また、文字1の文字コードの値は、文字2の文字コードの値より小さくなければなりません。
/root/text = 'class[A-C]'
/root/textが示す要素ノードの値に“classA”、“classB”または“classC”という文字列を含む場合に真となります。
注意
文字範囲指定の検索を実行する場合に、searcherが多くのメモリを使用することがあります。
メモリサイズの詳細については、“部分文字指定”を参照してください。
要素ノードの値、テキストノードの値または属性ノードの値に、指定されたキーワードが含まれるかどうかを調べます。キーワードの一部は、指定された範囲の数値のいずれかで構成されます。
数値1と数値2には、ともに半角数字を指定します。数値1と数値2に指定できる値は、0~999です。また、数値1は、数値2より小さくなければなりません。
/root/text = 'アルコール[9,11]%'
/root/textが示す要素ノードの値に“アルコール9%” “アルコール10%”または“アルコール11%”という文字列を含む場合に真となります。
ポイント
数値の前後に文字を指定すると、正しい検索結果が得られます。
注意
数値範囲指定の検索を実行する場合に、searcherが多くのメモリを使用することがあります。
メモリサイズの詳細については、“部分文字指定”を参照してください。
要素ノードの値、テキストノードの値または属性ノードの値に、指定されたキーワードと一致する単語が含まれるかどうかを調べます。ワード検索の場合は、区切り文字で区切られた文字列を、単語として識別します。
/root/text = '\<the\>'
/root/textが示す要素ノードの値に“the”という単語を含む場合に真となります。たとえば、“mother”の“the”は単語の途中にあるため偽となります。
要素ノードの値、テキストノードの値または属性ノードの値に、指定された2つのキーワードが指定された単語数以内の間隔をおいて連続して出現するかどうかを調べます。
ワード間隔指定の数値に指定できる値は、0~1024です。
/root/text = '\<search\>,10W,\<shunsaku\>'
/root/textが示す要素ノードの値に“search”と“shunsaku”という単語を含み、かつ、その2つの単語の間の単語数が10ワード以内である場合に真となります。
注意
ワード検索にワード間隔指定は、一度だけ指定することができます。