ym_sabn-****@yahoo*****
ym_sabn-****@yahoo*****
2007年 8月 30日 (木) 18:22:58 JST
お世話になっております。井上です。 >島村様 > > 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 >