Как сделать ранжирование по близости символов к началу?

Приветствую!

У меня есть таблица с продукцией где названия состоят в основном из бренда/сокращения и буквенной маркировки - например:

ПвВГнг(A)-LS
ВВГнг(A)-LS
АВВГнг(A)-LS
КВВГнг(A)-LS
ВВГнг(A)-LSLTx
АКВВГнг(A)-LS

Мне нужно в окне быстрого поиска показать первые результаты, где символы в запросе максимально приближены к началу строки.

Делаю такой запрос:

SELECT title, weight() FROM products WHERE MATCH ('*ввг*') order by weight() desc limit 6;

Результат такой

АКВВГЭ-ХЛ 2595
АКВВГЭнг(A) 2595
АПНвВГнг(A) 2595
АПвВГнг(A)-LS 2595

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

ВВГнг(A)-LS
ВВГнг(A)-LSLTx
КВВГнг(A)-LS
АВВГнг(A)-LS
АКВВГЭ-ХЛ
АКВВГЭнг(A)

Но увы. Ранкеры и формулы не помогают

а так не лучше будет?

SELECT title, weight() FROM products WHERE MATCH ('ввг* | *ввг*') order by weight() desc limit 6;

Лучше только для префиксов. Если в строке поиска и выдаче будут только *query* запросы - ранжирование будет рандомным, а вес в них - одинаковый.

тогда самому expand делать - звать suggest, выбирать из результата слова которые вам подходят, с суффиксом ближе к началу слова и из этих слов делать запрос через or и ввг со звёздочками

или посмотрите функции levenshtein и substring и попробуйте запросы

select levenshtein(attr_name, ‘ввг’ ) as score from idx where match (‘*ввг*’) order by weight() desc, score asc 
select substring_index(attr_name, ‘ввг’, 1 ) as score from idx where match (‘*ввг*’)  order by weight() desc, score asc

хотя substring_index это не то - эта функция не возвращает индекс.

Можете написать свой udf expression по типу manticoresearch/udfexample.c at master · manticoresoftware/manticoresearch · GitHub

но которая бы возвращала int score насколько далеко искомая строка от начала и вызывать ее как

select my_str_index(attr_name, ‘$’) as score from idx where match (‘*$*’)  order by weight() desc, score asc

А можно ли сделать сортировку просто по кол-ву символов в title? Т.е результаты с малым и специфичным названием поместить в самое начало. Это бы решило часть проблем по крайней мере, в моем случае

https://manual.manticoresearch.com/Functions/Arrays_and_conditions_functions#LENGTH()

вот есть функция length которую вы можете использовать