Поисковая система Sphinx: различное значение min_prefix_len для разных полей - PullRequest
0 голосов
/ 07 мая 2018

В sphinx я могу установить минимальную длину префикса слова для индексации с помощью свойства min_prefix_len.

Я хочу установить разные значения min_prefix_len для разных полей. Например, у меня есть поле «Имя», которое я хочу установить min_prefix_len = 5, и другое поле «Класс», которое должно быть установлено на 3. Другими словами, я хочу установить min_prefix_len для поля, а не для индекса. Возможно ли это сделать в конфигурации поисковой системы sphinx?

1 Ответ

0 голосов
/ 08 мая 2018

min_prefix_len можно установить только для каждого индекса, но если вы не беспокоитесь о том, чтобы тратить дополнительные ресурсы, вы можете установить min_prefix_len = 3 для всего индекса, а затем просто контролировать поведение в своем приложении, чтобы запретить поиск по @name весли длина ключевого слова меньше 5. Например:

Ключевое слово = abc:

mysql> select * from idx_min where match('@class abc*|@name abc');
+------+--------+--------+
| id   | class  | name   |
+------+--------+--------+
|    1 | abcdef | ghijkl |
+------+--------+--------+
1 row in set (0.01 sec)

Ключевое слово = abcde:

mysql> select * from idx_min where match('@class abc*|@name (abcde|abcde*)');
+------+--------+--------+
| id   | class  | name   |
+------+--------+--------+
|    1 | abcdef | ghijkl |
+------+--------+--------+
1 row in set (0.00 sec)

Ключевое слово = ghi:

mysql> select * from idx_min where match('@class ghi*|@name ghi');
Empty set (0.00 sec)

Keyword = ghijk:

mysql> select * from idx_min where match('@class ghi*|@name (ghijk|ghijk*)');
+------+--------+--------+
| id   | class  | name   |
+------+--------+--------+
|    1 | abcdef | ghijkl |
+------+--------+--------+
1 row in set (0.00 sec)

Т.е. просто помните, что в этом случае у вас есть префиксы> = 3 символа для @name и добавьте логику в ваше приложение, чтобы поставить * при необходимости.

...