[groonga-dev,02599] Re: [mroonga] asterisk wildcard operator

Back to archive index

warp kawada warp.****@gmail*****
2014年 8月 11日 (月) 17:28:32 JST


ありがとうごいざいます。
あー、なるほど。じゃ、mregexp が使えれば、

MATCH(..) AGAINST ('*D+ 中国 外国' IN BOOLEAN MODE) AND .. mregexp(...,
'中国..外国')

が出来そうですね。でも、mregexp が動いてくれないんですけね (涙

例が悪かったです。
「中国日本外国」や「中国人外国」をヒットさせたいのです。



2014年8月11日 17:16 yoku ts. <yoku0****@gmail*****>:

> おっと…。
>
> > [Q2]たとえば、
> > 「中国の外国」や「中国人と外国」を含むものだけをヒットさせるようなことは
> > 可能でしょうか?
>
> 順番の指定は難しかった記憶があります。
> ぱっと思い付く感じだと、
>
> MATCH(..) AGAINST ('*D+ 中国 外国' IN BOOLEAN MODE) AND .. LIKE '%中国%外国%'
>
> とか思い浮かびました。
>
> フルテキストで十分行数が絞り込めれば、LIKEでなんとか順番を指定して誤魔化せないかなぁとか思いましたが、
> これだとスニペットがつらそうですね。。
>
>
> yoku0825,
>
>
>
> 2014年8月11日 17:11 yoku ts. <yoku0****@gmail*****>:
>
> > こんにちは、yoku0825といいます。
> >
> > > SELECT title, MATCH (title) AGAINST('中国*外国' IN BOOLEAN MODE) AS score
> > > FROM books;
> >
> > 少なくともMySQLのレイヤーで、
> > これは「中国(任意の文字列)外国」を表すクエリーではありません。
> > アスタリスクが使えるのは前方一致検索のみで、
> > '中国*'であれば、「中国の」を表すことはできますが、間に挟むことはできません。
> >
> > http://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html
> >
> >
> > よって'中国*外国'が1件も結果を返さないために、
> > マッチエスカレーションが発生しているんじゃないでしょうか。
> >
> > http://mroonga.org/ja/docs/reference/server_variables.html
> >
> > http://groonga.org/docs/spec/search.html
> >
> >
> > トークナイズ方法がわからないので推測ですが、
> > 「中国の人口」が /中国/の/人口/ のようにトークナイズされている場合、
> > '中国*'は/中国/の部分にマッチするので、'中国'と'中国*'は同じ結果を返すと思います。
> > たとえば「中国地方」や「中国大陸」が
> > /中国地方/や/中国大陸/として1トークンに収まっていれば、
> > 2つのクエリーは違った結果セットを返すのではないでしょうか。
> >
> >
> > [Q3]はmroonga_snippetで可能です。
> >
> > mysql56> SHOW CREATE TABLE snippet_test\G
> > *************************** 1. row ***************************
> >        Table: snippet_test
> > Create Table: CREATE TABLE `snippet_test` (
> >   `id` int(11) NOT NULL,
> >   `text` text,
> >   PRIMARY KEY (`id`),
> >   FULLTEXT KEY `text` (`text`) COMMENT 'parser
> > "TokenBigramSplitSymbolAlphaDigit"'
> > ) ENGINE=mroonga DEFAULT CHARSET=utf8
> > 1 row in set (0.00 sec)
> >
> > mysql56> SELECT * FROM snippet_test;
> >
> >
> +----+-------------------------------------------------------------------------------------------------+
> > | id | text
> >                              |
> >
> >
> +----+-------------------------------------------------------------------------------------------------+
> > |  1 | An open-source fulltext search engine and column store.
> >                             |
> > |  2 | An open-source storage engine for fast fulltext search with MySQL.
> >                              |
> > |  3 | Tritonn is a patched version of MySQL that supports better
> fulltext
> > search function with Senna. |
> >
> >
> +----+-------------------------------------------------------------------------------------------------+
> > 3 rows in set (0.00 sec)
> >
> > mysql56> SELECT id, text, mroonga_snippet(text, 8, 1, 'ascii_general_ci',
> > 1, 1, '', '', 'fulltext', '', '') FROM snippet_test WHERE MATCH(text)
> > AGAINST ('full*');
> >
> >
> +----+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
> > | id | text
> >                              | mroonga_snippet(text, 8, 1,
> > 'ascii_general_ci', 1, 1, '', '', 'fulltext', '', '') |
> >
> >
> +----+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
> > |  1 | An open-source fulltext search engine and column store.
> >                             | fulltext
> >                                      |
> > |  2 | An open-source storage engine for fast fulltext search with MySQL.
> >                              | fulltext
> >                                      |
> > |  3 | Tritonn is a patched version of MySQL that supports better
> fulltext
> > search function with Senna. | fulltext
> >                                      |
> >
> >
> +----+-------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------+
> > 3 rows in set (0.01 sec)
> >
> >
> > どうでしょうか?
> >
> >
> > yoku0825,
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > 2014年8月11日 14:48 warp kawada <warp.****@gmail*****>:
> >
> > 河田です。
> >>
> >> いつも、お世話になっております。質問です。
> >> 「*」が使えるらしいので、適当なfulltext dbにてクエリを試してみました。
> >>
> >> SELECT title, MATCH (title) AGAINST('中国*' IN BOOLEAN MODE) AS score FROM
> >> books;
> >>
> >> の結果と、
> >>
> >> SELECT title, MATCH (title) AGAINST('中国' IN BOOLEAN MODE) AS score FROM
> >> books;
> >>
> >> は同じでした。
> >>
> >>
> >> SELECT title, MATCH (title) AGAINST('中国*外国' IN BOOLEAN MODE) AS score
> >> FROM books;
> >>
> >> とすると、
> >>
> >> SELECT title, MATCH (title) AGAINST('*DOR 中国 外国' IN BOOLEAN MODE) AS
> >> score FROM books;
> >>
> >> と同じみたいです。
> >> [Q1]これで正しい動きでしょうか?
> >>
> >> [Q2]たとえば、
> >> 「中国の外国」や「中国人と外国」を含むものだけをヒットさせるようなことは
> >> 可能でしょうか?
> >>
> >> [Q3]ヒットした「*」を含む文字列を取得することは可能でしょうか?
> >> たとえば[Q2]が'中国*外国'のように出来たとすると、「中国人と外国」の文字列を
> >> 取得するということです。
> >>
> >> 以上、よろしくお願いします。
> >>
> >> --
> >> ===
> >> Yukihiro KAWADA
> >> _______________________________________________
> >> groonga-dev mailing list
> >> groon****@lists*****
> >> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
> >>
> >
> >
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
>



-- 
===
Yukihiro KAWADA



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