Подсветка кириллицы

Добрый день!
Manticore 3.4.2 6903305@200410 release
два запроса:

> mysql> CALL SNIPPETS('[{"<domains>":" yandex.ru "}]', 'index_name', 'yandex.ru*', 0 as limit, 'retain' as html_strip_mode);

±-------------------------------------+
| snippet |
±-------------------------------------+
| [{"<domains>":" <b>yandex.ru</b> "}] |
±-------------------------------------+
1 row in set (0.00 sec)

mysql> CALL SNIPPETS('[{"<domains>":" yandex.рф "}]', 'index_name', 'yandex.рф*', 0 as limit, 'retain' as html_strip_mode);
±--------------------------------+
| snippet |
±--------------------------------+
| [{"<domains>":" yandex.рф "}] |
±--------------------------------+
1 row in set (0.01 sec)

От чего во втором случае нет подсветки?
В индексе:
charset_table = 0…9, A…Z->a…z, _, a…z, U+410…U+42F->U+430…U+44F, U+430…U+44F, U+401->U+435, U+451->U+435, U+002D, U+002E

мы можете создать текстовый файл с utf-8 кодировкой, куда скопировать запросы и выполнять их как

mysql -h 127.0.0.1 -P 6706 < q.sql

тк есть шанс что mysql клиент не поддерживает кодировку

Из c++ кода такое же поведение.

тогда это баг - сделайте воспроизводимый пример (конфиг индекса и запрос) и приложите его в тикет на Github

На ваших charset_table действительно не работает:

mysql> create table index_name(f text) charset_table = '0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+401->U+435, U+451->U+435, U+002D, U+002E' html_strip='1';
Query OK, 0 rows affected (0.01 sec)

mysql> CALL SNIPPETS('[{"<domains>":" yandex.рф "}]', 'index_name', 'yandex.рф*', 0 as limit, 'retain' as html_strip_mode);
+---------------------------------+
| snippet                         |
+---------------------------------+
| [{"<domains>":" yandex.рф "}]   |
+---------------------------------+
1 row in set (0.00 sec)

Но на дефолтных всё ок:

mysql> create table index_name(f text) html_strip='1';
Query OK, 0 rows affected (0.20 sec)

mysql> CALL SNIPPETS('[{"<domains>":" yandex.рф "}]', 'index_name', 'yandex.рф*', 0 as limit, 'retain' as html_strip_mode);
+----------------------------------------+
| snippet                                |
+----------------------------------------+
| [{"<domains>":" <b>yandex.рф</b> "}]   |
+----------------------------------------+
1 row in set (0.07 sec)

И на russian, english тоже:

mysql> create table index_name(f text) html_strip='1' charset_table='russian, english';
Query OK, 0 rows affected (0.00 sec)

mysql> CALL SNIPPETS('[{"<domains>":" yandex.рф "}]', 'index_name', 'yandex.рф*', 0 as limit, 'retain' as html_strip_mode);
+----------------------------------------+
| snippet                                |
+----------------------------------------+
| [{"<domains>":" <b>yandex.рф</b> "}]   |
+----------------------------------------+
1 row in set (0.00 sec)

Так что ищите проблему в ваших charset_table.

Почему тогда select запросы работают правильно?
Из документации:

only English and Russian letters

charset_table = 0…9, A…Z->a…z, _, a…z, U+410…U+42F->U+430…U+44F, U+430…U+44F, U+401->U+451, U+451

индекс:
charset_table = 0…9, A…Z->a…z, _, a…z, U+410…U+42F->U+430…U+44F, U+430…U+44F, U+401->U+435, U+451->U+435, U+002D, U+002E
разница только в ё->e и добавлены “-” U+002D и “.” - U+002E

Какие именно и какой находят документ?

находится yandex.рф

если бы вы приводили полный кейс

  • индекс с такими настройками
  • документ с такими полями (данные полей)
  • полный запрос такой(запрос)
  • результат запроса (result set)

то это могло бы ускорить воспроизведение описываемого вами поведения

тк у вас что-то не находит, у нас что-то другое находит и мы будем переписыватся в находит \ не находит очень долго

А лучше бы тикет на Github, с полным, воспроизводимым примером, который можно было бы запустить и проверить на локальной машине, что не так - без подбора запросов, настроек индекса и текста документа.

Завёл issue cyrillic char + period + call snippets + retain mode don't highlight · Issue #423 · manticoresoftware/manticoresearch · GitHub