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 >