[groonga-dev,00535] Re: 全角スペース

Back to archive index

Kouhei Sutou kou****@clear*****
2011年 6月 10日 (金) 20:21:48 JST


須藤です。

In <627e5026-de2c-3a6d-9696-50b371942722 @ api104>
  "[groonga-dev,00534] 全角スペース" on Fri, 10 Jun 2011 19:52:56 +0900,
  "Endo Akira" <endo4****@goo*****> wrote:

> prod:@"K R" 
> まではやったのですが、その外側でquoteしなければいけなかったという 
> ことでしたか。 

そうなんですよ。
って、あ、「"」の位置が間違っていました。すみません。↓です。

> select --table items --query 'prod:@"K R"'

それで、↑では、まず最初に

  「select --table items --query 'prod:@"K R"'」

を

  「select」 「--table」 「items」 「--query」 「prod:@"K R"」

に区切る必要があるのですが、そのときに外側の「'」が必要にな
ります。

次に、

  「prod:@"K R"」

の中身を解釈するのですが、そのときに

  「K R」

を、ひとまとめの検索文字列として扱うために「"」が必要になり
ます。

「--query」の引数はエンドユーザからの入力が入ってくることを
想定しているので、半角空白も全角空白も同じように扱うようにす
るためです。

ただ、今のgroongaの実装では

  「select --table items --query 'prod:@"K R"'」

を区切るときでも全角空白を半角空白と同じように扱ってしまって
いました。なので、元のコマンド

  「select --table items --query prod:@K R」

は

  「select」 「--table」 「items」 「--query」 「prod:@K」 「R」

に区切られてしまい、「R」がselectの(オプション引数ではなく)
第一引数(つまりテーブル名)と認識され、エラーメッセージがで
ていたのでした。


と、ここまで書いて気づいたのですが、今回のクエリはquery内で
「K R」をひとまとまりと扱うためには「"」が必須なので、やっ
ぱり↓のようにしなければいけませんでした。なので、↓を使って
ください。

  「select --table items --query 'prod:@"K R"'」


> rroongaの方もそれでうまくいきそうでしょうか。 

いくような気がします。
手元で試せるような

  1. スキーマ定義と
  2. サンプルデータと
  3. サンプルコードと
  4. 実際の結果と
  5. 期待する結果を

教えてもらうことってできますか?

> とりあえず、検索文字列のインデックスを作る際に半角スペース(は当然として)、 
> 全角スペースを捨てて、検索の時も半角、全角スペースを捨てようかな、と思っていました。 
> 
> ところが半角スペースの方はrroongaで受け付けてくれているような感じがあります。 
> という言い方はおかしくて、インデックスを作る時半角スペースは単語区切りとなって 
> いて、rroongaのselectでマッチさせる時も半角スペースは単語区切りと認識している? 

うーん、トークナイザーは何を使っていますか?
もし、TokenBigramを使っているのであれば、
TokenBigramIgnoreBlankにすると期待した挙動になるかもしれませ
ん。

参考:
  8.1.3. 対策方法1: トークナイザーを変更する
  http://groonga.org/ja/docs/troubleshooting/different_results_with_the_same_keyword.html#id4


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

プログラミングが好きなソフトウェア開発者を募集中:
  http://www.clear-code.com/recruitment/




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