Kazuhiko
kazuh****@fdiar*****
2009年 9月 3日 (木) 20:01:07 JST
こんにちは、かずひこです。 Tritonnというか、Sennaの検索式の質問な気もしますが、"word*"という検索式 の意味が"word"とどう異なるのか分かりません。 * senna-1.1.4 * tritonn-1.0.12-mysql-5.0.67 "*"が付いている、付いていないに関わらず、exactマッチがあればそれだけ返し て、exactマッチが無ければ、部分一致を試しているように見えます。 しかし、 | ** 単語* | ある単語から始まる文字列を検索する、という条件を表す。 というQUERY.JAの記述からは、"word*"の場合は、exactマッチがあろうがなかろ うが部分一致もしてくれそうに感じます。 以下は、"garra"という語と"garrahan"という語が含まれるテーブルに対する検 索の例で、MySQLのクエリとsennaのログを載せておきます。 ・"garra"で検索 (exact=1) mysql> select uid from full_text where MATCH (`full_text`.`SearchableText`) AGAINST ('garra' in boolean mode) limit 1000; 1 row in set (0.00 sec) |i|3| ft_init_boolean_search => sen_query_open: str='garra', str_len=5, max_exprs=32 |d|3| ft_init_boolean_search => sen_query_rest: q=0x24b25e0, rest=0x440c80e8 |d|3| ft_init_boolean_search => sen_records_open |i|3| ft_init_boolean_search => sen_query_exec: i=0x2489d40, q=0x24b25e0, r=0x24b1e50 |i|3| n=1 (garra) |i|3| hits(exact)=1 |d|3| ft_init_boolean_search => sen_query_close: q=0x24b25e0 |d|3| ft_boolean_reinit_search => sen_records_rewind: records=0x24b1e50 |d|3| ft_boolean_close_search => sen_records_close: records=0x24b1e50 ・"garra*"で検索 (exact=1) mysql> select uid from full_text where MATCH (`full_text`.`SearchableText`) AGAINST ('garra*' in boolean mode) limit 1000; 1 row in set (0.00 sec) |i|3| ft_init_boolean_search => sen_query_open: str='garra*', str_len=6, max_exprs=32 |d|3| ft_init_boolean_search => sen_query_rest: q=0x24b25e0, rest=0x440c80e8 |d|3| ft_init_boolean_search => sen_records_open |i|3| ft_init_boolean_search => sen_query_exec: i=0x2489d40, q=0x24b25e0, r=0x24b1e50 |i|3| n=1 (garra*) |i|3| hits(exact)=1 |d|3| ft_init_boolean_search => sen_query_close: q=0x24b25e0 |d|3| ft_boolean_reinit_search => sen_records_rewind: records=0x24b1e50 |d|3| ft_boolean_close_search => sen_records_close: records=0x24b1e50 ・"garrah"で検索 (exact=0) mysql> select uid from full_text where MATCH (`full_text`.`SearchableText`) AGAINST ('garrah' in boolean mode) limit 1000; 40 rows in set (0.00 sec) |i|3| ft_init_boolean_search => sen_query_open: str='garrah', str_len=6, max_exprs=32 |d|3| ft_init_boolean_search => sen_query_rest: q=0x24b25e0, rest=0x440c80e8 |d|3| ft_init_boolean_search => sen_records_open |i|3| ft_init_boolean_search => sen_query_exec: i=0x2489d40, q=0x24b25e0, r=0x24b1e50 |i|3| hits(exact)=0 |i|3| n=1 (garrah) |i|3| hits(unsplit)=40 |d|3| ft_init_boolean_search => sen_query_close: q=0x24b25e0 |d|3| ft_boolean_reinit_search => sen_records_rewind: records=0x24b1e50 |d|3| ft_boolean_close_search => sen_records_close: records=0x24b1e50 ・"garrah*"で検索 (exact=0) mysql> select uid from full_text where MATCH (`full_text`.`SearchableText`) AGAINST ('garrah*' in boolean mode) limit 1000; 40 rows in set (0.00 sec) |i|3| ft_init_boolean_search => sen_query_open: str='garrah*', str_len=7, max_exprs=32 |d|3| ft_init_boolean_search => sen_query_rest: q=0x24b25e0, rest=0x440c80e8 |d|3| ft_init_boolean_search => sen_records_open |i|3| ft_init_boolean_search => sen_query_exec: i=0x2489d40, q=0x24b25e0, r=0x24b1e50 |i|3| hits(exact)=0 |i|3| n=1 (garrah*) |i|3| hits(unsplit)=40 |d|3| ft_init_boolean_search => sen_query_close: q=0x24b25e0 |d|3| ft_boolean_reinit_search => sen_records_rewind: records=0x24b1e50 |d|3| ft_boolean_close_search => sen_records_close: records=0x24b1e50 どうぞよろしくお願いします。 かずひこ