ofmind.net サイト内検索

検索フレーズの書き方

スペースで区切って単語を並べると AND と見なします.

「または」で検索したい場合は明示的に OR を書きます.

おなじみの複雑検索

論理演算とグルーピング, 必須/禁止修飾子, フィールド指定, フレーズ検索, ワイルドカード検索, 単語とフレーズのファジー検索, レンジ検索, ブースト, 等々.

基本的に Lucene 標準のクエリ構文はすべて使えます.

正規表現

/あいう?えお/ のようにスラッシュで囲むことで、正規表現を使ってワイルドカードのようにパターンでの検索ができます.

構文は /pattern/flags です. フラグは無くても構いません. フィールド指定やブーストを組み合わせることもできます.

使用可能なパターン表現とフラグはJava標準の正規表現と同様です.

例: /0x[a-f0-9]+/i^3 OR title:/\p{Alpha}{6,8}/

スパン検索

グルーピングで使う (...) の後に WITHIN <n> を加えることで、いわゆる NEAR 検索ができます. 例えば (sunny day) WITHIN 2 と書くと sunnyday の間が2語以内ならヒットします. さらに、WITHIN <n> INORDER とすれば、 (...) に書いた順序どおり という条件を加えることができます.

また, WITHIN [<m> TO <n>] を加えると, m を先頭位置, n を末尾位置とした位置スパン検索ができます. <m> <n> には * も使えます. その場合, m では 0, n では の意味になります. 例えば (example) WITHIN [* TO 4] とすると, 先頭 5 単語以内に example が現れる, という検索になります.

スパンの (...) の中では, ワイルドカードやファジー単語, 正規表現を使うこともできます. 対照的に, フレーズのファジー指定 "..."~n ではこれらは使用できません. さらにスパン (...) の中にスパンを入れ子にしたり, ORNOT でつなげたりもできます.

すべてにマッチ

*:* のようにフィールドと値の両方をアスタリスクにすると, すべての文書にマッチするクエリを表現できます.

これは NOT などとの組み合わせで効果を発揮します.

レンジ検索

旧来の Lucene 標準パーザでは 範囲の指定は 閉区間 [... TO ...] もしくは開区間 {... TO ...} でなければなりませんが, このシステムでは半開区間 {... TO ...] または [... TO ...} も使えます.

完全な構文定義

Query         = 1*Disjunction
Disjunction   = Conjunction *( Or Conjunction ) 
Conjunction   = Clause *( And Clause )
Clause        = [ Modifier ] [ Field ] ( Term / Group ) [ Boost ]
Modifier      = "+" / "-" / Not
Field         = ( Word / "*" ) ":"
Group         = "(" Query ")" [ Within ( Proximity / Position ) ]
Term          = Single / Phrase / Range / WildCard / RegExp / "*"

Single        = ( Word / Number ) [ Fuzzy ]
Phrase        = DQUOTE *QuotedChar DQUOTE [ Fuzzy ]
Range         = RangeStart RangeLimit [ To ] RangeLimit RangeEnd
RangeLimit    = 1*< any UChar except WildCardChar or DQUOTE or "," or RangeEnd > / DQUOTE *QuotedChar DQUOTE / "*"
WildCard      = TermStartChar *( TermChar / WildCardChar )
RegExp        = "/" *RegExpChar "/" *( "i" / "d" / "m" / "s" / "u" / "x" / "C" / "L" )
Fuzzy         = "~" Number
Boost         = "^" Number
Proximity     = Integer [ "INORDER" ]
Position      = "[" ( Integer / "*" ) [ To ] ( Integer / "*" ) "]"

And           = "AND" / "&&"
Or            = "OR" / "||"
Not           = "NOT" / "!"
Within        = "WITHIN" / "~~"
To            = "TO" / ","
RangeStart    = "[" / "{"
RangeEnd      = "]" / "}"
Word          = TermStartChar *TermChar
Number        = 1*DIGIT [ "." 1*DIGIT ]
Integer       = 1*DIGIT

WildCardChar  = "*" / "?"
SpaceChar     = SP / HTAB / CR / LF / %x000B / %x000C / %x0085 / %x00A0 / %x1680 / %x180E
SpaceChar     =/ %x2000-200D / %x2028 / %x2029 / %x202F / %x205F / %x2060 / %x2800 / %x3000 / %xFEFF
ReservedChar  = "+" / "-" / "!" / "(" / ")" / ":" / "^" / "[" / "]" / "{" / "}" / DQUOTE / "~" / "\" / "/" / "@"
EscapedChar   = "\" UChar
TermStartChar = < any UChar except ReservedChar or WildCardChar or SpaceChar > / EscapedChar
TermChar      = TermStartChar / "+" / "-" / "/" / "@"
QuotedChar    = < any UChar except DQUOTE or "\" > / EscapedChar
RegExpChar    = < any UChar except "/" or "\" > / EscapedChar
UChar         = %x000001-10FFFF

フィールド一覧

フィールド名説明
uriURI
mimetypeMIME タイプ
titleタイトル
author著者
date.created作成日
date.modified修正日
keywordキーワード
subject主題
default フィールドを省略した場合のデフォルト. 本文,タイトル,キーワードなどが含まれる.

すべての文書にすべてのフィールドが登録されているわけではありません.