Я выполняю поиск FULLTEXT по таблице InnoDB, ища фразы, а не отдельные ключевые слова. например. поиск «foo bar» как фразы из двух слов, а не «foo» и «bar» по отдельности.
Вот мои тестовые данные:
+----+-------------------------------------------------------------------------------+
| id | content |
+----+-------------------------------------------------------------------------------+
| 1 | example foo text bar |
| 2 | default value foo foo server |
| 3 | default value foo foo server bar foo test |
| 4 | process foo bar potato integer text bar bar content foo foo value bar foo foo |
| 5 | foo bar demo string value foo bar music foo bar most foo bar |
+----+-------------------------------------------------------------------------------+
А вот мой тестовый запрос:
SELECT *, MATCH(content) AGAINST ('"foo bar"' IN BOOLEAN MODE) AS score
FROM test
WHERE MATCH(content) AGAINST ('"foo bar"' IN BOOLEAN MODE)
Проблема в результатах:
+----+-------------------------------------------------------------------------------+--------------------+
| id | content | score |
+----+-------------------------------------------------------------------------------+--------------------+
| 4 | process foo bar potato integer text bar bar content foo foo value bar foo foo | 0.948742687702179 |
| 5 | foo bar demo string value foo bar music foo bar most foo bar | 0.8314893841743469 |
+----+-------------------------------------------------------------------------------+--------------------+
Как видите, строка 5 содержит фразу "foo bar" четыре раза, тогда как строка 4 содержит ее только один раз, но строка 4 оценивается выше 5. Похоже, что рейтинг игнорирует требование фразы.
Кто-нибудь знает, как заставить это работать правильно?