Я прописал примерно такие синонимы в wordforms:
тут > здесь
и в целом использую примерно такие настройки индекса:
type = rt
morphology = lemmatize_ru_all, lemmatize_en_all
wordforms = wordforms_test.txt
min_word_len = 2
min_infix_len = 4
index_exact_words = 1
expand_keywords = exact
При нечётком поиске всё работает как ожидается:
MySQL [(none)]> insert into test (id, body) values(1, 'здесь был вася');
Query OK, 1 row affected (0.006 sec)
MySQL [(none)]> insert into test (id, body) values(2, 'тут был вася');
Query OK, 1 row affected (0.001 sec)
MySQL [(none)]> select id from test where match('здесь был вася');
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.001 sec)
MySQL [(none)]> select id from test where match('тут был вася');
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.001 sec)
Но при попытке искать точную фразу всё летит к чертям:
MySQL [(none)]> select id from test where match('="здесь был вася"');
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.001 sec)
MySQL [(none)]> select id from test where match('="тут был вася"');
Empty set (0.001 sec)
call keywords такой:
MySQL [(none)]> call keywords('тут', 'test');
+------+-----------+------------+
| qpos | tokenized | normalized |
+------+-----------+------------+
| 1 | тут | здесь |
+------+-----------+------------+
1 row in set (0.000 sec)
MySQL [(none)]> call keywords('здесь', 'test');
+------+------------+-------------+
| qpos | tokenized | normalized |
+------+------------+-------------+
| 1 | здесь | здесь |
| 1 | здесь | =здесь |
+------+------------+-------------+
2 rows in set (0.000 sec)
Хотя я вообще-то ожидал, что keywords тут ни при чём и что при index_exact_words=1 будет индексироваться конкретно «тут» и содержимое wordforms не будет влиять на поиск точной фразы.
Подскажите, почему так происходит и как это можно пофиксить?