Naoya Murakami
visio****@gmail*****
2015年 5月 23日 (土) 09:20:25 JST
村上です。 > TokenTrigramでトークナイズした文書を2文字で検索したいのですが、 > TokenTrigramって「TokenBigramに1文字の検索文字列を投げた時の > ように前方一致で上手くやってくれる」機能はなかったりしますか? TokenTrigramで2文字で検索したときも勝手に前方一致でうまくやって くれる機能が以下のPRで追加されました! https://github.com/groonga/groonga/pull/341 また、Gistの最後に書いてあったDプラグマと前方一致のアスタリスク を一緒に使うときの挙動もおかしかったので以下のPRで直しました! https://github.com/mroonga/mroonga/pull/54 この2つを入れれば、Gistの例ではすべて4レコードで返ってきます〜 masterかnightlyを使うか、次のリリースをお待ちください! 以上です。 村上 2015年5月21日 21:34 Naoya Murakami <visio****@gmail*****>: > 村上です。 > > さらにすいません。。 > このケースなら次のトークンが字種境界であるかどうかという > 判定まではたぶん必要ありませんでしたね。。 > > TokenTrigramの場合に対応させる場合、REACH_ENDの場合も > force_prefixを追加するという対応だけで大丈夫なような気がしました。 > > diff --git a/lib/token_cursor.c b/lib/token_cursor.c > index d98d1d4..1fa355d 100644 > --- a/lib/token_cursor.c > +++ b/lib/token_cursor.c > @@ -245,7 +245,8 @@ grn_token_cursor_next(grn_ctx *ctx, grn_token_cursor > *token_cursor) > continue; > } > } else { > - if (status & GRN_TOKEN_LAST) { > + if (status & GRN_TOKEN_REACH_END || > + status & GRN_TOKEN_LAST) { > token_cursor->force_prefix = GRN_TRUE; > } > } > > 次のトークンが字種境界であるかまでを判定する必要があったのは個人的に > やっていたGET時のトークンを飛ばすやつかVgramにするときに必要になった > のかもしれません。(忘れた) > > 以上です。 > > > 2015年5月21日 20:22 Naoya Murakami <visio****@gmail*****>: > > 村上です。 >> >> お久しぶりです! >> >> すいません。 >> ついメールしちゃいましたが、よくよく考えるともう少し考慮が必要ですね。。 >> >> 次のトークンが字種境界であるかどうかという判定もいるかもしれません。 >> (このあたり無駄なく奇麗に書く自身がないからPRを投げるのをやめておいたのを >> 思い出しました。) >> >> (1) 1トークンでクエリが2文字だけ(UNMATURED)の場合 >> クエリ:"だよ" >> 本文:"だよね" >> はヒットするべき(強制前方一致フラグつける) >> >> (2) 複数トークンで2つめのトークンが2文字だけの場合 >> クエリ:"ABCだよ" >> 本文:"ABCだよね" >> はヒットするべき(強制前方一致フラグつける) >> >> (3) 複数トークンで1つめのトークンが2文字だけの場合 >> クエリ:"これABC" >> 本文:"これはABC" >> はヒットしないべき(強制前方一致フラグつけない) >> >> 以上です。 >> >> >> 2015年5月21日 19:57 yoku ts. <yoku0****@gmail*****>: >> >> わあ、お久しぶりです :) >>> ありがとうございます。 >>> >>> このへんをホゲればいいいみたいですよ! 須藤さん! (?????? >>> >>> >>> ところで、メーリングリストのドメイン変わったんですね。 >>> これか。。 >>> Slashdot JapanならびにSourceForge.JP、サイト名称変更のお知らせ | OSDN株式会社 >>> >>> http://osdn.co.jp/press/2015/04/%E3%82%B5%E3%82%A4%E3%83%88%E5%90%8D%E7%A7%B0%E5%A4%89%E6%9B%B4%E3%81%AE%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B >>> >>> >>> yoku0825, >>> >>> >>> >>> 2015年5月21日 19:44 Naoya Murakami <visio****@gmail*****>: >>> > 村上です。 >>> > >>> > たしか、今のTokenTrigramはそんな感じでした。 >>> > (かなり久しぶりにGroongaのソース見ました) >>> > >>> > >>> https://github.com/groonga/groonga/blob/master/lib/token_cursor.c#L248-L250 >>> > (1個目のトークンはUNMATUREDでGRN_TOKEN_REACH_ENDですがGRN_TOKEN_LASTじゃない) >>> > >>> > >>> https://github.com/groonga/groonga/blob/master/lib/tokenizers.c#L433-L435 >>> > >>> > GET時のトークンが1個で、且つ、REACH_ENDの場合(字種境界じゃない場合)は、 >>> > TokenTrigramでも強制前方一致検索されるとよさそうに思いました。 >>> > >>> > 以上です。 >>> > >>> > >>> > 2015年5月21日 19:28 yoku ts. <yoku0****@gmail*****>: >>> >> >>> >> こんばんは、yoku0825といいます。 >>> >> >>> >> TokenTrigramでトークナイズした文書を2文字で検索したいのですが、 >>> >> >>> TokenTrigramって「TokenBigramに1文字の検索文字列を投げた時のように前方一致で上手くやってくれる」機能はなかったりしますか? >>> >> >>> >> 1文字のクエリーを投げると前方一致にすり替えてくれてそうなんですが、2文字はマッチ検索しているっぽいです。こういう仕様でしたっけ? >>> >> >>> >> https://gist.github.com/yoku0825/1da3aa16a2dd14e99f55 >>> >> >>> >> >>> >> 取り敢えずyumでmysql-community-mroongaを突っ込んだもので再現しています。 >>> >> >>> >> >>> >> ( ´-`).oO(TokenBigramからTokenTrigramに乗り換えようとしたら、2文字のクエリーだけ盛大におかしくて。。 >>> >> ( ´-`).oO(mroonga_match_escalation_thresholdを有効にしろとかそんな感じですかね…? >>> >> >>> >> >>> >> yoku0825, >>> >> _______________________________________________ >>> >> groonga-dev mailing list >>> >> groon****@lists***** >>> >> http://lists.osdn.me/mailman/listinfo/groonga-dev >>> > >>> > >>> > >>> > _______________________________________________ >>> > groonga-dev mailing list >>> > groon****@lists***** >>> > http://lists.osdn.me/mailman/listinfo/groonga-dev >>> > >>> _______________________________________________ >>> groonga-dev mailing list >>> groon****@lists***** >>> http://lists.osdn.me/mailman/listinfo/groonga-dev >>> >> >> > -------------- next part -------------- HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...Download