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

Back to archive index

Tetsuro IKEDA ikdtt****@gmail*****
2007年 8月 30日 (木) 17:35:15 JST


こんにちは。池田@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 メーリングリストの案内
Back to archive index