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*****>