2017.12.15 Friday
スポンサーサイト
一定期間更新がないため広告を表示しています
| スポンサードリンク | - | | - | - |
関口宏司のLuceneブログOSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
2006.11.13 Monday
独自QueryParserの作成(4)
検索式演算子の優先度
AND/OR/NOTの演算子を含む検索式を正しくBooleanQueryに展開するために、演算子の「結合規則」や「優先順位」を決める必要がある。MyQueryParserではこれを次の表のように定めることとする:
「結合規則」はすべて=>となっており、これは「左結合」を意味する。また演算子NOTは二項演算子なので「A NOT B」のように使用する場面に適用されるものであり、「NOT A」のようなNOTについてはのちほど考えることにする。また演算子を省略した場合は初回に決めたMyQueryParserの仕様どおりANDと解釈する。 生成規則を作成する 左結合の二項演算子の式を表現する生成規則は次のとおりである(前回紹介した「JavaCC - コンパイラ・コンパイラ for Java」などを参照):
また、被演算子の式を表現する生成規則は次のとおりである:
これらの生成規則を前出の表の優先順位に沿って組み合わせていく。 最初は被演算子の式を表現する生成規則を使ってphraseExpr()を作成する。これは次のようである:
次に、表の中でもっとも優先度の高いAND演算子の生成規則を作成する。これは左結合なのでleftExpr()を用いて次のようになる:
ここで、leftExpr()の右辺のhigherExpr()は優先順位が上位のphraseExpr()に置き換えられている。 次に、表の中で次に優先度の高いOR演算子の生成規則を作成すると、次のようになる:
以下同様にNOTと省略時の演算子の生成規則を作成する:
以上をまとめると、検索式の生成規則は全体で次のようになる:
""を認識する 次に「"(ダブルクオーテーション)」でくくられた検索質問語を認識するように修正を加える。""でくくられるものは、ひとつ以上の単語でフレーズとなることから、前出のphraseExpr()に追加して、次のようになる:
ここで、「"」は<QUOTE>という表現に置き換えている。 「NOT 検索質問語」をサポートする 次に「NOT A」というフォーマットの検索式をサポートするように修正を加える。 ここで使われるNOTは前出の二項演算子のNOTとは異なり単項演算子である。しかも、(数式の単項演算子"-"(マイナス)とは異なり)検索式の途中には出現せず、常に先頭にのみ使われる。ということは、検索式は「defaultExpr()」かあるいは「NOT defaultExpr()」であると考えてよい。結局、検索式queryExpr()の生成規則は、全体として次のようになる:
生成規則のコード化 生成規則を(読みやすさを考えて)順序を逆転し、JavaCCのコードに置き換えると次のようになる:
次回は上記JavaCCのコードにアクションを記述する。また、検索禁止語への対応は(JavaCCではなく)Javaのプログラムでおこなうため、アクションを記述したあとに考える。 コメント
いつも拝読させていただいております。
こちらのエントリ、tableタグの至る所に改行タグが挿入されていて、Safari や Firefox で見ると異様に大量の空白行が表示されるようです。 FYI
| インギ | 2006/11/13 5:43 PM |
インギさん、こんにちは。
そうなんです。なんでそうなってしまうのか、よくわからないのですが。。。
| 関口 | 2006/11/13 7:37 PM |
blogサーバ側で自動的に改行が入るようになっているのではないでしょうか?
table,tr,tdまで改行せず続けて書けば良いかもしれません?
| インギ | 2006/11/13 11:10 PM |
> table,tr,tdまで改行せず続けて書けば良いかもしれません
ビンゴでした!
| 関口 | 2006/11/13 11:16 PM |
コメントする
この記事のトラックバックURL
トラックバック機能は終了しました。
トラックバック
JavaCC―コンパイラ・コンパイラfor Java
よい本です.そもそもJavaCCの情報はWebにもあまりなく,詳しい解説をしている本が他にありま...
| もぼなもな書房 | 2009/05/22 4:50 PM |
|
+ Solrによるブログ内検索
+ PROFILE
+ LINKS
+ Lucene&Solrデモ
+ ThinkIT記事
+ RECOMMEND
+ RECOMMEND
Lucene in Action (JUGEMレビュー »)
Erik Hatcher,Otis Gospodnetic,Mike McCandless FastVectorHighlighterについて解説記事を寄稿しました。
+ RECOMMEND
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ MOBILE
+ SPONSORED LINKS
|
(C) 2024 ブログ JUGEM Some Rights Reserved.
|
PAGE TOP |