Kouhei Sutou
kou****@clear*****
2011年 10月 31日 (月) 11:04:38 JST
須藤です。 In <9CC976EC0D4AFhashi311_style****@yahoo*****> "[groonga-dev,00597] Re: パターンマッチングの否定構文について" on Mon, 31 Oct 2011 10:45:22 +0900, hashi <hashi311_style****@yahoo*****> wrote: > やりたい事ですが以下のレコードがあった場合に > 「釜飯という文字列が入っているレコード以外を取得したい」という事になります。 > > "釜飯二郎" > "ラーメン二郎" > "回転寿司二郎" > > 須藤様が提供して下さったページも参照したのですが > 中々取得出来ない状態です。 > > _key:@"釜飯" ← 「釜飯」を含む文字列は取得出来る > (このパターンは正常に1件取得出来ます) > > _key:@"-釜飯" ← 「釜飯」を含まない文字列が取得出来ず > (2件取得したいのですが0件となります) なるほど! とすると、以下のように--filterの中で「&!」演算子を使うとでき ると思います! (動かしていないのでシンタックスエラーになるかもですが。。。) select ... --filter '"true &! _key @ \"釜飯\""' 「_key:@"-釜飯"」というように「-」を前置した場合は、すでにマッ チしている検索結果から「釜飯」にヒットするレコードを抜くとい う感じになるので、いきなり「-釜飯」だとヒットしないんです。 --filterの例のように「true」で最初に全レコードを検索結果に入 れると「釜飯」を含まないレコードを取得できるのですが、最初に 全レコードを選択してしまうのでレコード数が多いと遅いと思いま す。。。もし、「釜飯」のような検索結果から抜きたい文字列が事 前にわかっているのであれば、あらかじめデータベースから削除し てしまうとか前処理した方がよいかもしれません。 ドキュメントには書いていないのですが、--filterの中の「&!」演 算子は a &! b aという条件にマッチしたレコードからbという条件にマッチし たレコードを引く という感じになります。 >>--queryと--filterに関してはもっと網羅的な感じになるようにドキュ >>メントを整備したいなぁとは思っているのですが、なかなか手を付 >>けられておらず、すみません。。。 > > いえ、ドキュメントはかなり整備されていると思うのですが・・。 > かなり助かってます。 ↑の「&!」のようにまだ載っていないものがあるのですが、現状の 分でも使ってもらえているようでよかったです! -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) プログラミングが好きなソフトウェア開発者を募集中: http://www.clear-code.com/recruitment/