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のみにヒットします。
このあたりの挙動はドキュメントに無さそうですが、具体的にはどのようになっ
ていますか?
よろしくお願いします。
かずひこ