Kazuhiko
kazuh****@fdiar*****
2014年 9月 24日 (水) 18:02:02 JST
こんにちは、かずひこです。 TokenBigramSplitSymbolAlphaDigit を使うと、Natural Language Modeでの検索 結果が、英単語の場合はgramごとの隣接関係を無視しているようで、こんな結果 になります。 MariaDB [erp5_test]> SELECT *, MATCH (content) AGAINST ("bell") AS score FROM diaries2; +----+--------------------------------------------------+--------+ | id | content | score | +----+--------------------------------------------------+--------+ | 1 | It'll be fine tomorrow as well. | 299594 | | 2 | It'll rain tomorrow. | 149797 | | 3 | It's fine today. It'll be fine tomorrow as well. | 299594 | | 4 | It's fine today. But it'll rain tomorrow. | 149797 | | 5 | Ring the bell. | 149797 | | 6 | I love dumbbells. | 131073 | +----+--------------------------------------------------+--------+ bellで検索すると、bellそのものが含まれるid=5よりも、llとかbeとかelとかの 含まれるid=1やid=3がスコアが高くなり、実用的でなさそうです。日本語での使 用だと、TokenBigramとnatural language modeの組み合わせでも、それほど不自 然な結果にはならないのでしょうか? 一方、boolean modeだと、 MariaDB [erp5_test]> SELECT *, MATCH (content) AGAINST ("bell" in boolean mode) AS score FROM diaries2; +----+--------------------------------------------------+-------+ | id | content | score | +----+--------------------------------------------------+-------+ | 1 | It'll be fine tomorrow as well. | 0 | | 2 | It'll rain tomorrow. | 0 | | 3 | It's fine today. It'll be fine tomorrow as well. | 0 | | 4 | It's fine today. But it'll rain tomorrow. | 0 | | 5 | Ring the bell. | 1 | | 6 | I love dumbbells. | 1 | +----+--------------------------------------------------+-------+ このように、'bell' と連続して出現するid=5とid=6のみにヒットします。 このあたりの挙動はドキュメントに無さそうですが、具体的にはどのようになっ ていますか? よろしくお願いします。 かずひこ