Походу старый баг именно str_replace, вон 11 лет назад тоже обсуждают https://www.linux.org.ru/forum/development/5591142
ответ вероятно в этом, цитирую
"Если же посмотреть на php_str_replace_in_subject() в ext/standard/string.c (фактически это и есть реализация str_replace()), она проходит по всему массиву $search и для каждого его элементы вызывает php_str_to_str_ex(), которая каждый раз просматривает строку заново"
Как оказалось недостаточно просто выбрать дефолтный маркер, нужно еще и жестко прописать его цвет, тогда цвета на группировке будут нормальные
preset: 'islands#dotIcon', iconColor: '#735184'
В том же примере что по ссылке есть цвета, добавьте их в свой код:
Там же эти цвета тупо для генерации рандомных точек. У меня же цвета меток задаются через стандартные цвета https://yandex.ru/dev/maps/jsapi/doc/2.1/ref/reference/option.presetStorage.html
В моем коде это -
preset: res[i].color
var clusterer = new ymaps.Clusterer();
Заменил на
var clusterer = new ymaps.Clusterer({ // Макет метки кластера pieChart. clusterIconLayout: 'default#pieChart', // Радиус диаграммы в пикселях. clusterIconPieChartRadius: 15, // Радиус центральной части макета. clusterIconPieChartCoreRadius: 10, // Ширина линий-разделителей секторов и внешней обводки диаграммы. clusterIconPieChartStrokeWidth: 1, // Определяет наличие поля balloon. hasBalloon: false });
Как видно на фото - синий и зеленый цвета (на иконках группировки) не совпадают с цветами одиночных иконок, почему так?
Нашел ответ тут https://yandex.ru/dev/maps/jsbox/2.1/clusterer_pie_chart/?from=SO
Наверное в плане релевантности лучше использовать полнотекстовый индекс да? И искать нужно не кратком заголовке, а по всему вопросу.
Проверил - по скорости тоже самое что LIKE без Юнион ~0.04 сек
(SELECT 0 AS level, t1.*, CONCAT_WS('-', t1.id, t1.alias) AS item_alias, CONCAT_WS('-', t2.id, t2.alias) AS section_alias FROM xyfq1_consultations_items AS t1 INNER JOIN xyfq1_consultations_sections AS t2 ON t1.section_id = t2.id WHERE t1.parent_id = 0 AND t1.status = 1 AND t1.id != '1850' AND t1.section_id = '17' AND (MATCH(t1.text) AGAINST ('Болезнь') OR MATCH(t1.text) AGAINST ('Паркинсона'))) ORDER BY RAND() LIMIT 3
В целом, да, так и есть. Логика - дать больше результатов поиска, как вату, если изначальные запросы, к примеру, не дадут достаточный результат
Все теперь понятно, спасибо. Вероятно это было оправдано в начале, когда консультаций было мало, сейчас их десятки тысяч, уберу Юнион.
Это попытка найти более точные результаты и поxожие
А в чем логика? Т.е. сначала ищем эти слова, а потом все что не содержит эти слова? Как это поможет повысить точность?