Начал с малого, открыл официальную статью о wordforms и создал индекс ровно как показано в примере:
https://sphinxsearch.com/blog/2014/12/04/how-to-us...
Мой конфиг стал таким:
indexer
{
mem_limit = 128M
}
searchd
{
listen = 9312
listen = 9306:mysql41
log = /var/log/sphinx/searchd.log
query_log = /var/log/sphinx/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinx/searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = /var/lib/sphinx/
}
source tsv_test
{
type = tsvpipe
tsvpipe_command = cat sample.tsv
tsvpipe_field_string = title
}
index tsv_test
{
source = tsv_test
path = /var/lib/sphinx/tsv_test
wordforms = syns.txt
}
После этого успешно могу подключиться к в mysql командой:
mysql -h0 -P9306
и запросить
select * from tsv_test where match('c2d');
получить
+------+------------+
| id | title |
+------+------------+
| 1 | Core 2 Duo |
+------+------------+
1 row in set (0.00 sec)
Отлично, подумал я, всё работает, попробую подключить wordforms к реалтайм индексу. Создал реалтайм индекс согласно инструкции
sphinxsearch.com/docs/current/rt-overview.html и конфиг стал таким:
indexer
{
mem_limit = 128M
}
searchd
{
listen = 9312
listen = 9306:mysql41
log = /var/log/sphinx/searchd.log
query_log = /var/log/sphinx/query.log
read_timeout = 5
max_children = 30
pid_file = /var/run/sphinx/searchd.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
workers = threads # for RT to work
binlog_path = /var/lib/sphinx/
}
source tsv_test
{
type = tsvpipe
tsvpipe_command = cat sample.tsv
tsvpipe_field_string = title
}
index tsv_test
{
source = tsv_test
path = /var/lib/sphinx/tsv_test
wordforms = syns.txt
}
index rt
{
type = rt
path = /var/lib/sphinx/rt
rt_field = title
rt_field = content
rt_attr_uint = gid
wordforms = syns.txt
}
Подключаюсь к MySQL вношу запись
INSERT INTO rt VALUES ( 1, 'Core 2 Duo', 'Core 2 Duo' , 5);
Проверяю:
mysql> SELECT * FROM rt WHERE MATCH('Core 2 Duo');
+------+------+
| id | gid |
+------+------+
| 1 | 5 |
+------+------+
1 row in set (0.00 sec)
Делаю похожий же запрос рассчитывая что отработает синоним
mysql> SELECT * FROM rt WHERE MATCH('c2d');
И ничего не получаю
Empty set (0.00 sec)
Я уверен что дело не в syns.txt однако приведу его ниже:
c2d > Core 2 Duo
e6600 > Core 2 Duo
core 2duo > Core 2 Duo
Можете кто-нибудь мне помочь. Я и в документации ничего такого пока не нашел.
Хотя молва говорит, что всё должно работать.