yoku ts.
yoku0****@gmail*****
2014年 8月 11日 (月) 17:16:46 JST
おっと…。 > [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 >> > >