[groonga-dev,00598] Re: パターンマッチングの否定構文について

Back to archive index

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/




groonga-dev メーリングリストの案内
Back to archive index