TokyoCabinet::TDB(テーブルデータベース)の検索クエリまとめと参照したページまとめ
作者のmikioさんも推している所ではあるけれど、TDBではkey-value-storeとしてはかなり豊富な検索が行える。まとめたというほどでもないけど、整理してみた。
- QCSTR*系(string)
- EQ:コラムの文字列と等しい
- INC:コラムの文字列に〜が含まれる
- BW:コラムが〜で始まる
- EW:コラムが〜で終わる
- AND:token(タグ)検索
- OR:token(タグ)検索
- OREQ:(これまだ理解していない)
- RX:token(タグ)検索・正規表現で検索
#token検索の例 #TDBを開く db.put("1",{"lang"=>"ruby,c++,perl,c"}) db.put("2",{"lang"=>"perl,c,python"}) db.put("3",{"lang"=>"c++,perl,python"}) db.put("4",{"lang"=>"c"}) qry = TDBQRY::new(db) qry.addcond("lang", TDBQRY::QCSTRAND,"c,python")#cとpythonを両方含む p qry.search() #=> ["2"] c++は一致しないのがミソ #TDBを閉じる
他の例
#データは上と同じ qry = TDBQRY::new(db) qry.addcond("lang", TDBQRY::QCSTRRX,"p.*")#正規表現で検索。pで始まるtokenを含む p qry.search()#=> ["1", "2", "3"]
否定するときはTDBQRY::QCNEGATEを使う。
#データは上と同じ qry = TDBQRY::new(db) qry.addcond("lang", TDBQRY::QCSTROR|TDBQRY::QCNEGATE,"c,python")#(c,pythonをどちらか含む)の補集合 p qry.search()#=>[]
#データは上と同じ qry = TDBQRY::new(db) qry.addcond("lang", TDBQRY::QCSTRAND|TDBQRY::QCNEGATE,"c,python")#(c,pythonを両方含む)の補集合 p qry.search()#=> ["1", "4", "3"]
- QCNUM*系(number)
- EQ:等しい
- GT:より大きい
- GE:以上
- LT:より小さい
- LE:以下
- BT:2数の間
- OREQ:コラムに含まれるカンマ区切りの数字のどれかに等しい
#ここの例は省略
- QCFTS*系(Full text search)
- PH:〜を含む
- AND:全てを含む
- OR:どれかを含む
- EX:複雑な検索表現を使う
#ここの例はもう少し理解してから書きます