HAYASHI Kentaro
hayas****@clear*****
2015年 1月 21日 (水) 18:46:45 JST
林です。 二重引用をエスケープするには、\\"としてみてください。 元のデータを再現できているか怪しいですが、 mysql> select * from MY_TABLE; +----+--------------------------------+ | id | EN_TEXT | +----+--------------------------------+ | 1 | from " redial/dial on phone | | 2 | from two-sided studio | | 3 | >From perspective of industry | +----+--------------------------------+ 3 rows in set (0.00 sec) mysql> select count(1) as counts from MY_TABLE where match (EN_TEXT) against('\\"' in boolean mode); +--------+ | counts | +--------+ | 1 | +--------+ 1 row in set (0.00 sec) こんな感じに検索できます。 エスケープについては、「mroongaで特殊記号を用いた全文検索を行うときのエスケープ方法」というブログ記事があるので、 参考になるかもしれません。 http://y-ken.hatenablog.com/entry/mroonga-query-escape-string どうしてそうするの?という点については普段意識することのない MySQL <-> Mroonga <-> Groongaというレイヤの違いが あってというあたりが次の記事に書いてあります。 mroongaで記号類を含むクエリのシンタックスエラーを回避する方法 http://qiita.com/groonga/items/0ae7f637525c7b5f2cb1 ざっくりいうと途中でクエリのエスケープの解釈がはいるので、Groongaに意図したクエリを渡すためには \"でなく\\"としないといけませんよ、ということなんです。 On Wed, 21 Jan 2015 17:41:50 +0900 m-dob****@rozet***** wrote: > ドブリンです。 > > > FULLTEXT検索を使うときに、二重引用をリテラル文字として検索できないようで > す。↓のmysql文を使うときに、 > > > select count(1) as counts from MY_TABLE where match (EN_TEXT) against('" > "from " redial/dial""' in boolean mode) > > この文章しかヒットしないはずなのに、 > > from " redial/dial on phone > > ↓の文章もヒットしています。 > > > from two-sided studio > >From perspective of industry > > > テーブルの定義が下記の通りです。 > > CREATE TABLE `MY_TABLE` ( > `id` int(11) NOT NULL AUTO_INCREMENT, > `EN_TEXT` text NOT NULL, > PRIMARY KEY (`id`), > FULLTEXT KEY `key` (`EN_TEXT`) > ) ENGINE=mroonga DEFAULT CHARSET=utf8; > > > 二重引用をエスケープする方法がありますか? > > > よろしくお願いします。 > ドブリン > > _______________________________________________ > groonga-dev mailing list > groon****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/groonga-dev -- HAYASHI Kentaro <hayas****@clear*****>