Человек набирает в поиске: мерседес е200
Поисковик определяет направление поиска
е200 мерседес('benz_mercedes', 1055.8079999999993)('mercedes_купить', 227.4048)('бенц_мерседес', 178.6752)('класс_мерседес', 157.0176)('200_класс', 140.77439999999999)('mercedes_фото', 129.94559999999998)('mercedes_продажа', 124.5312)('200_мерседес', 124.41599999999995)('200_mercedes', 116.12159999999996)('купить_мерседес', 102.8736)('200_benz', 81.216)('200_купить', 81.216)('s212_w212', 77.75679999999998)('benz_class', 74.22239999999998)('мерседес_продажа', 70.38719999999999)('невысокий_цена', 67.15359999999997)('200_рестайлинга', 60.48000000000002)('200_premium', 48.7296)('mercedes_автомобиль', 43.3152)('200_4matic', 43.3152)('c207_s212', 39.48)('автомобиль_пробег', 38.878399999999985)('автомобиль_мерседес', 37.9008)('mercedes_цена', 37.9008)('iv_класс', 35.71999999999999)('iv_w212', 35.71999999999999)('200_c238', 32.486399999999996)('пробег_продажа', 31.80959999999999)('auto_продажа', 31.80959999999999)('авто_купить', 31.80959999999999)('авто_ру', 31.80959999999999)('технический_характеристика', 28.27519999999999)('w213_класс', 28.27519999999999)('дилер_официальный', 28.27519999999999)('200_пробег', 27.072)('auto_mercedes', 27.072)('s213_w213', 24.740799999999993)('c238_s213', 24.740799999999993)('4matic_sport', 24.740799999999993)
В итоге так оно и делается, просто поэтапно:
Корпус из сниппетов по запросу камаз (кроме этого отдельно собираются 'title', 'headline', 'hlword'):
('камаз_пао', 87)('официальный_сайт', 33)('пао_сайт', 31)('дилер_официальный', 14)('камаз_компания', 13)('автомобиль_грузовой', 12)('дилер_камаз', 12)('камаз_мастер', 11)('обслуживание_сервисный', 9)('автомобильный_завод', 9)('российский_федерация', 8)('запасный_продажа', 8)('kamaz_камаз', 8)('информационный_материал', 8)('комплаенс_контрагент', 8)('интернет_магазин', 8)('камаз_купить', 8)('компания_официальный', 7)('горячий_линия', 7)
Совместная обработка корпуса сниппетов:= Функция(корпус сниппетов, ключи букварикса, 'title', 'headline', 'hlword')
('камаз_пао', 371.0528)('камаз_компания', 70.38719999999999)('kamaz_камаз', 66.35519999999998)('дилер_камаз', 64.97279999999999)('камаз_мастер', 59.5584)('дилер_официальный', 49.48159999999998)('камаз_купить', 43.3152)('автомобиль_грузовой', 42.41279999999998)('двигатель_камаз', 32.486399999999996)('грузовик_камаз', 32.486399999999996)('обслуживание_сервисный', 31.80959999999999)('автомобильный_завод', 31.80959999999999)('камаз_самосвал', 27.072)('камаз_тягач', 24.8288)('5490_камаз', 24.8288)('автоцентр_камаз', 14.399999999999999)('камаз_лизинг', 11.64)('6520_камаз', 11.64)('автомобиль_спецтехник', 9.0687999999999995).....100500 еще....
Дальше gensim lsi по корпусу текстов документов из топа с корректировкой весов лемм задающих скрытые тематики на полученное выше. Но, и приведенного выше, часто достаточно для того, чтобы обвесить документ продвигаемый по запросу "камаз", материалами (статьи, новости, фото, видео, товары) релевантными
'камаз_пао', 'камаз_компания', 'kamaz_камаз', 'дилер_камаз', 'камаз_мастер', 'дилер_официальный', 'камаз_купить','автомобиль_грузовой', 'двигатель_камаз', 'грузовик_камаз', 'обслуживание_сервисный', 'автомобильный_завод','камаз_самосвал', 'камаз_тягач', '5490_камаз', 'автоцентр_камаз', 'камаз_лизинг', '6520_камаз', 'автомобиль_спецтехник'
В итоге обвес достаточно тематичный, документ полнее раскрывает тему запроса.
А если там "R0805-1%-100R резисторы" или даже, страшно подумать, вот так "R0805", или так "0.125Вт 100 Ом 5% SMD"?
Ну вот из Гугла "Вместе с ... часто ищут"
10 000 000? Покажете, как это не проблема?
Пока, наглядно показано, что для поиска 10 ближайших предложений (по координатам юзера). Наиболее затратно, что объяснимо.
await do_geo(request)
и простой пагинатор: 10 страница (30 на странице)
_cat = Cat('komplektuyuschie', request)cat_listing = await _cat.pages(10, 30)
на базах разных размеров дает ощутимую разницу в производительности.
Для теста использовались: aiohttp + mongodb.
А как иначе? Т.е, технически, и 10.000.000 в их базе не предел. Еще намек.
Простой эксперимент:
ret = await get_content(request, ret)await do_geo(request) ret['GEO'] = request.get('GEO')ret['beside'] = request.get('beside')_cat = Cat('komplektuyuschie', request)cat_listing = await _cat.pages(10, 30)
В никуда получаем 30 записей с 10 страницы. Результат 3000 запросов с конкурентностью 200
ab -n 3000 -c 200Document Length: 86774 bytesConcurrency Level: 200Time taken for tests: 71.992 secondsComplete requests: 3000Failed requests: 0Write errors: 0Total transferred: 260847000 bytesHTML transferred: 260322000 bytesRequests per second: 41.67 [#/sec] (mean)Time per request: 4799.435 [ms] (mean)Time per request: 23.997 [ms] (mean, across all concurrent requests)Transfer rate: 3538.38 [Kbytes/sec] receivedDocument Length: 86774 bytesConcurrency Level: 200Time taken for tests: 5.133 secondsComplete requests: 3000Failed requests: 0Write errors: 0Total transferred: 260847000 bytesHTML transferred: 260322000 bytesRequests per second: 584.41 [#/sec] (mean)Time per request: 342.224 [ms] (mean)Time per request: 1.711 [ms] (mean, across all concurrent requests)Transfer rate: 49623.19 [Kbytes/sec] received
В одном случае база в 8000 товаров, в другом 900000. Даже миллиона нет, но производительность снизилась в 10 раз.
Умножаем:
100 * ~10000 = 1.000.000 позиций в каталоге (те кто платит). Вероятно, есть и те кто не платит. Иначе как привлечь, тех кто платит.
Ну пусть 1.000.000. Что там? Бегло 161000 документов в гугле. Следовательно, нагрузка от ботов. Вероятно, понятно где сложности. Если нет, то получится, когда 5 фирм все бодро, а когда 50 начнут морду бить.
Не суть как называются, вернее я назвал (главным образом по названию в хмл)
#кусок кодаif doc.name in ['passages', 'title', 'headline']: hl = doc.find_all('hlword')
Данные, которые я привел не используются напрямую. А в составе алгоритма, который кроме этих биграмм использует подсветки, ключи из букварикса имеющих вхождение запроса, контента до 40 первых первых документов из топ 100 (обычно 20). И т.д.
"top":[{"relevance":"","url":"https://www.ucoz.ru/","domain":"www.ucoz.ru","modtime":"20061111T030000","size":"827","charset":"utf-8","properties":"0ru","mime-type":"text/html"},{"relevance":"","url":"https://skillbox.ru/media/marketing/6_besplatnykh_konstruktorov_saytov/","domain":"skillbox.ru","modtime":"20200626T153303","size":"3487","charset":"utf-8","properties":"0ru","mime-type":"text/html"},{"relevance":"","url":"https://www.internet-technologies.ru/how-to-create-a-website.html","domain":"www.internet-technologies.ru","modtime":"20100402T040000","size":"7064","charset":"utf-8","properties":"0ru","mime-type":"text/html"}
Фактически, то что выше приведено используется для корректировки веса н-грамм задающих лси тематику из контента документов входящих в топ
Жесть. Ни лемматизации, ни удаления стопслов.
А по теме - границы сео компоненты движка можно расширить до неприличия. У меня, например, используется и такое:
Биграммы по запросу "создание сайта" из пассажей выдачи топ 100 Яндекс хмл
('сайт_создать', 109)('сайт_создание', 81)('конструктор_сайт', 41)('бесплатно_сайт', 36)('нуль_сайт', 19)('ключ_сайт', 16)('сайт_создавать', 15)('бизнес_сайт', 12)('бесплатно_нуль', 12)('сайт_самостоятельно', 11)('продвижение_сайт', 11)('кью_яндекс', 9)('инструкция_пошаговый', 8)('дзный_яндекс', 8)('бесплатный_конструктор', 7)('сайт_собственный', 7)('разработка_сайт', 7)('бесплатно_создать', 7)('сайт_сайт', 7)('бесплатно_конструктор', 6)('сайт_система', 6)('продвижение_создание', 6)('сайт_яндекс', 6)('визитка_сайт', 5)('люба_сайт', 5)('бесплатно_яндекс', 5)('интернет_магазин', 5)('кью_создать', 5)('пошаговый_сайт', 5)('нуль_самостоятельно', 4)('готовый_шаблон', 4)('онлайн_сайт', 4)('простой_шаг', 4)('платформа_сайт', 4)('создание_способ', 4)('инструкция_создание', 4)('готовый_сайт', 4)('сайт_шаблон', 4)('ключ_создание', 4)('разработка_создание', 4)('разный_сайт', 4)('лендинга_магазин', 3)('бесплатно_пошаговый', 3)('инструкция_создать', 3)('нуль_полный', 3)('wix_сайт', 3)('веб_сайт', 3)('собственный_создать', 3)('простой_сайт', 3)('publishing_tilda', 3).... всего 1196 ....('css_html', 1) ('css_движок', 1) ('joomla_wordpress', 1) ('joomla_обзор', 1) ('обзор_популярный', 1) ('онлайн_популярный', 1)
Про лси и генсим ссылку повторю https://searchengines.guru/ru/forum/1022504
Вполне возможно использовать для обвеса документа.
Как то тоже поднимал такой вопрос тут: https://searchengines.guru/ru/forum/1024069/page3#comment_16254940 , косвенно с этим пересекается такая тема https://searchengines.guru/ru/forum/1022504/page8#comment_16212911
Все написано же:
Ошибка синтаксиса или нарушение прав доступа: команда DROP 1142 отклонена пользователю com @ localhost для таблицы level1
Привилегии юзера сом смотрите