[Senna-dev 670] Re: NGRAM での英数字の部分一致検索について

Back to archive index

ym_sabn-****@yahoo***** ym_sabn-****@yahoo*****
2007年 9月 6日 (木) 02:04:17 JST


お世話になっております。井上です。

早速ありがとうございます!
今手元に確認できる環境がないので、明日にでも
早速試してみようと思います。
&tritonn-1.0.5のリリースを楽しみにしてます。

ありがとうございました!m(_ _)m


# >池田さん
# 本返信、重複して届いてしまったと思います。すみません。m(_ _)m


--- Tetsuro IKEDA <ikdtt****@gmail*****> wrote:

> 連投でスミマセン。池田(mir)@tritonnです。
> 
> URLが間違っておりました。以下が正しいURLです。
> http://svn.sourceforge.jp/svnroot/tritonn/mysql-5.0.45-tritonn-1.0.5/
> 
> # 自分でプロダクト名間違えてどーする^^;
> 
> 07/09/06 に Tetsuro IKEDA<ikdtt****@gmail*****> さんは書きました:
> > こんにちは。池田(mir)@tritonnです。
> >
> > 本件、Tritonnにて対応いたしましたー。
> >
> > 詳細は以下のページをご覧下さい。
> > http://d.hatena.ne.jp/mir/20070906/p2
> >
> > 現在はsubversionレポジトリにて確認できます。
> > svn co http://svn.sourceforge.jp/svnroot/tritonn/mysql-5.0.45-triton-1.0.5
> >
> > 問題がなければ次期リリースのTritonn 1.0.5で正式に導入予定です。
> >
> > 07/08/30 に ym_sabn-****@yahoo*****<ym_sabn-****@yahoo*****> さんは書きました:
> > > お世話になっております。井上です。
> > >
> > > >島村様
> > > > > Sennaのソースコードlib/lex.cの
> > > > >
> > > > >   44   lex->uni_alpha = (nstr->ctypes && !(lex->sym->flags & SEN_INDEX_SPLIT_ALPHA));
> > > > >   45   lex->uni_digit = (nstr->ctypes && !(lex->sym->flags & SEN_INDEX_SPLIT_DIGIT));
> > > > >   46   lex->uni_symbol = (nstr->ctypes && !(lex->sym->flags & SEN_INDEX_SPLIT_SYMBOL));
> > > > >
> > > > > 辺りをコメントアウトすると可能です。
> > >
> > > 試してみました。
> > > バッチリです!希望通りの結果となりました!
> > > ありがとうございました!
> > >
> > >
> > > >池田様
> > > > となるとUSING句をもうちょい拡張して対応、というのが良さそうですね。
> > > > 今後のロードマップに入れさせていただきます。
> > >
> > > はい!ぜひよろしくお願いいたします!
> > > #島村様の方法でうまくはいきましたが、やはりソースに手を
> > > #加えるのは抵抗がありますので… ^^;
> > >
> > >
> > > 以上、ありがとうございました! m(_ _)m
> > >
> > >
> > > --- Tetsuro IKEDA <ikdtt****@gmail*****> wrote:
> > >
> > > > こんにちは。池田@tritonnです。
> > > >
> > > > となるとUSING句をもうちょい拡張して対応、というのが良さそうですね。
> > > > 今後のロードマップに入れさせていただきます。
> > > >
> > > > 07/08/30 に Yutaro Shimamura<yu****@irx*****> さんは書きました:
> > > > >
> > > > > こんにちは。島村です。
> > > > >
> > > > > SEN_INDEX_SPLIT_ALPHAやSEN_INDEX_SPLIT_DIGITフラグを
> > > > > インデックス作成時につけることによって、
> > > > > 文字数ごとの分割が可能になります。
> > > > >
> > > > > 今のトリトンでは指定できなかったような気がしますが、
> > > > > Sennaのソースコードlib/lex.cの
> > > > >
> > > > >   44   lex->uni_alpha = (nstr->ctypes && !(lex->sym->flags &
> > > > > SEN_INDEX_SPLIT_ALPHA));
> > > > >   45   lex->uni_digit = (nstr->ctypes && !(lex->sym->flags &
> > > > > SEN_INDEX_SPLIT_DIGIT));
> > > > >   46   lex->uni_symbol = (nstr->ctypes && !(lex->sym->flags &
> > > > > SEN_INDEX_SPLIT_SYMBOL));
> > > > >
> > > > > 辺りをコメントアウトすると可能です。
> > > > >
> > > > > (インデックス作成からやり直す必要がありますが)
> > > > >
> > > > >
> > > > > On Aug 30, 2007, at 5:21 PM, <ym_sabn-****@yahoo*****> <ym_sabn-
> > > > > mysql****@yahoo*****> wrote:
> > > > >
> > > > > > お世話になっております。井上です。
> > > > > > 表題の件について質問させてください。
> > > > > >
> > > > > > CREATE TABLE t1 (c1 TEXT, FULLTEXT INDEX ft USING NGRAM (c1))
> > > > > > ENGINE = MyISAM DEFAULT CHARSET utf8;
> > > > > > INSERT INTO t1 VALUES ("FedoraCore500の技");
> > > > > >
> > > > > > という状態で、
> > > > > >
> > > > > > SELECT * FROM t1 WHERE MATCH(c1) AGAINST("500");
> > > > > >
> > > > > > と検索するとヒットするのですが、
> > > > > >
> > > > > > SELECT * FROM t1 WHERE MATCH(c1) AGAINST("00");
> > > > > > や
> > > > > > SELECT * FROM t1 WHERE MATCH(c1) AGAINST("Core");
> > > > > >
> > > > > > と検索するとヒットしませんでした。
> > > > > > 英数字に限り単語単位に分けているのかなと思い、
> > > > > >
> > > > > > SELECT * FROM t1 WHERE MATCH(c1) AGAINST("Fedo");
> > > > > >
> > > > > > と試してみたのですが、これはヒットします。また、
> > > > > >
> > > > > > SELECT * FROM t1 WHERE MATCH(c1) AGAINST("50");
> > > > > >
> > > > > > もヒットします。
> > > > > > 純粋にNGRAM化されているのであれば「Core」や「00」でも
> > > > > > ヒットすると思っていましたので少々意外でした。
> > > > > >
> > > > > > また、非正規化(NO NORMALIZE)を付けて試してみたのですが、
> > > > > > その場合には、
> > > > > >
> > > > > > SELECT * FROM t1 WHERE MATCH(c1) AGAINST("00");
> > > > > > SELECT * FROM t1 WHERE MATCH(c1) AGAINST("Core");
> > > > > >
> > > > > > の両方ともヒットいたします。
> > > > > > 私の方での使用用途でのお話で恐縮ですが、「00」や「Core」
> > > > > > もヒットする方がしっくりくるようなサービスの予定ですので、
> > > > > > 何かよい手はないかと困っております。
> > > > > >
> > > > > > #例えば「DiningBar ルイーダの酒場」なんてお店があった場合、
> > > > > > #「Bar」で検索してもヒットして欲しい、といったような…。
> > > > > >
> > > > > > 非正規化のオプションを付けると当然ながら今度は、
> > > > > >
> > > > > > SELECT * FROM t1 WHERE MATCH(c1) AGAINST("500");
> > > > > >
> > > > > > と全角で検索するとヒットしなくなりますのでこれも避けたく
> > > > > > 思っています。
> > > > > > #アプリケーションレイヤーで対応できる内容ではありますが。
> > > > > >
> > > > > >
> > > > > > と、色々試してみまして、正規化と非正規化でいったいどのような
> > > > > > 差が出るのか、また、正規化を生かした状態で、
> > > > > >
> > > > > > SELECT * FROM t1 WHERE MATCH(c1) AGAINST("Core");
> > > > > >
> > > > > > をヒットさせる方法はないのか、といった点をご教授いただけ
> > > > > > ないでしょうか。
> > > > > >
> > > > > >
> > > > > > バージョンは、下記のとおりです。
> > > > > > senna-1.0.8
> > > > > > mysql-5.0.45-tritonn-1.0.4
> > > > > >
> > > > > >
> > > > > > 以上、お手数をおかけしますが何卒よろしくお願いいたします。
> > > > > >
> > > > > > _______________________________________________
> > > > > > Senna-dev mailing list
> > > > > > Senna****@lists*****
> > > > > > http://lists.sourceforge.jp/mailman/listinfo/senna-dev
> > > > >
> > > > > -------
> > > > > 島村 優太郎
> > > > > yu****@irx*****
> > > > >
> > > > > _______________________________________________
> > > > > Senna-dev mailing list
> > > > > Senna****@lists*****
> > > > > http://lists.sourceforge.jp/mailman/listinfo/senna-dev
> > > > >
> > > >
> > > > _______________________________________________
> > > > Senna-dev mailing list
> > > > Senna****@lists*****
> > > > http://lists.sourceforge.jp/mailman/listinfo/senna-dev
> > > >
> > >
> > > _______________________________________________
> > > Senna-dev mailing list
> > > Senna****@lists*****
> > > http://lists.sourceforge.jp/mailman/listinfo/senna-dev
> > >
> >
> 




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