回答してくださった方達を参考に自分なりに調べた結果、問題の原因は中点(・)が文字として扱われていないということのようです。
この問題を解決する簡単な方法の一つは、BOOLEAN MODEではなく、NATURAL LANGUAGE MODEで全文検索をすることです。以下のように類似度が最も高くなります。
SQL
1SELECT code, name,
2MATCH (name) AGAINST ('鉄鋼・非鉄金属工業' IN NATURAL LANGUAGE MODE) AS score
3FROM industries;
4
5+------+-----------------------------+----------------------+
6| code | name | score |
7+------+-----------------------------+----------------------+
8| 1 | 鉄鋼業 | 0.015609688125550747 |
9| 2 | 非鉄金属工業 | 0.07804843783378601 |
10| 3 | 鉄鋼・非鉄金属工業 | 0.8186105489730835 |
11| 4 | 情報通信業 | 0 |
12+------+-----------------------------+----------------------+
134 rows in set (0.00 sec)
14
確かに、BOOLEAN MODEでも類似度は高くなります。
SQL
1SELECT code, name,
2MATCH (name) AGAINST ('鉄鋼・非鉄金属工業' IN BOOLEAN MODE) AS score
3FROM industries;
4
5+------+-----------------------------+----------------------+
6| code | name | score |
7+------+-----------------------------+----------------------+
8| 1 | 鉄鋼業 | 0.009391550906002522 |
9| 2 | 非鉄金属工業 | 0.04695775359869003 |
10| 3 | 鉄鋼・非鉄金属工業 | 0.05634930357336998 |
11| 4 | 情報通信業 | 0 |
12+------+-----------------------------+----------------------+
134 rows in set (0.00 sec)
しかし、極端な例かも知れませんが「鉄鋼、非鉄金属工業」や「鉄鋼 非鉄金属工業」などのレコードがあった場合、BOOLEAN MODEでは中点(・)が文字として認識されていない以上同じ類似度になってしまいます。
SQL
1SELECT code, name,
2MATCH (name) AGAINST ('鉄鋼・非鉄金属工業' IN BOOLEAN MODE) AS score
3FROM industries;
4
5+------+-----------------------------+----------------------+
6| code | name | score |
7+------+-----------------------------+----------------------+
8| 1 | 鉄鋼業 | 0.004481872543692589 |
9| 2 | 非鉄金属工業 | 0.022409362718462944 |
10| 3 | 鉄鋼・非鉄金属工業 | 0.026891235262155533 |
11| 4 | 情報通信業 | 0 |
12| 5 | 鉄鋼、非鉄金属工業 | 0.026891235262155533 |
13| 6 | 鉄鋼 非鉄金属工業 | 0.026891235262155533 |
14+------+-----------------------------+----------------------+
156 rows in set (0.01 sec)
16
NATURAL LANGUAGE MODEの場合。
SQL
1SELECT code, name,
2MATCH (name) AGAINST ('鉄鋼・非鉄金属工業' IN NATURAL LANGUAGE MODE) AS score
3FROM industries;
4
5+------+-----------------------------+----------------------+
6| code | name | score |
7+------+-----------------------------+----------------------+
8| 1 | 鉄鋼業 | 0.015609688125550747 |
9| 2 | 非鉄金属工業 | 0.07804843783378601 |
10| 3 | 鉄鋼・非鉄金属工業 | 1.304697036743164 |
11| 4 | 情報通信業 | 0 |
12| 5 | 鉄鋼、非鉄金属工業 | 0.09365812689065933 |
13| 6 | 鉄鋼 非鉄金属工業 | 0.09365812689065933 |
14+------+-----------------------------+----------------------+
156 rows in set (0.00 sec)
ただ、NATURAL LANGUAGE MODEではBOOLEAN MODEでは行える「+」や「-」などのクエリが使えなくなるのがデメリットだと思います。BOOLEAN MODEでも中点などの記号を文字として認識させる方法がもしあれば教えて頂きたいです。
(参考)
MySQL公式ドキュメント 12.9.4 全文ストップワード
「ストップワードリストは自由形式で、改行、空白、カンマなどの英数字以外の文字でストップワードが区切られます。例外として、下線文字 (「_」) と単一アポストロフィー (「'」) は単語の一部として処理されます。ストップワードリストの文字セットは、サーバーのデフォルト文字セットです。セクション10.1.3.1「サーバー文字セットおよび照合順序」を参照してください。」