yopp
А сколько у вас товаров?
Morant
Поиск по подстроке в принципе сложная задача, так как подстроки очень дорого индексировать.
К сожалению, для монги простой ответ «никак».
Полнотекстовый индекс не поддерживает частичное совпадение по токену, только по его оригинальной словоформе. Нормализация происходит в момент обработки $text запроса, а дальше поиск по сути похож на поиск по multi-key индексу, с той разницей что «сортировка» будет по «коэффициенту совпадения»
Если вы можете выделять нужные вам токены при записи, а это достаточно легко для иерархических строк, например FQDN, то эти токены можно хранить в индексируемом массиве.
Если выделить подстроку при записи нельзя, то попробовать выделить префикс подстроки и записать её в индексируемый массив.
В остальных случаях, дешевле использовать сторонний инструмент, который строит индексы через разновидности trie.
Вы упомянули сторонник инструмент с trie индексами, можете что-то посоветовать?
Morant
yopp
200 000
В теории, это достаточно небольшая энтропия: 200,000 × 100. Т.е в худшем случае вам нужно хранить ~200 млн подстрок. В реальности мы скорее говорим о медианном значении длинны слова умноженном на медианное значении числа слов.
Так как поиск все еще по словам, то можно сделать двухуровневые индексы: первый уровень это уникальные слова и их подстроки, плюс подстроки словоформ. Второй уровень это ссылки на слова.
В этом случае поиск будет состоять из двух шагов:
* найти оригинальную подстроку среди всего множества уникальных строк. Тут есть простор для оптимизации, например еще один «уровень» который отрезает слова без нужных букв.
* по идентификатору слов найти документы
yopp
По поводу инструментов с trie затрудняюсь ответить. Кажется, я где-то недавно видел что в Cassandra что-то подобное завезли
yopp
Вероятнее всего самым дешевым вариантом будет использование решений от яндекса/гугла, так как эта проблема — их хлеб
Morant
yopp
Но не исключено, что у опенсурс решений есть что-то похожее
Morant
yopp
Ох, сложно, надо чуть-чуть осознать
Да, эта проблема сама по себе сложная и ресурсоёмкая. Для быстрого поиска нужны инструменты которые или более-менее дешево умеют строить индексы по всем символам в строке или которые умеют быстро искать по набору ключевых слов (по сути в «ширину», имея очень много сегментов строк и очень много железа, чтоб по сегменту строк можно было дешево делать параллельный поиск)
yopp
Инструменты можно поискать по научным публикациям на тему substring search/match, вероятно вы или облачный сервис найдёте, или готовы инструмент, или ошмётки кода написанного учёными из которого можно собрать свой звездолёт, если разобрать что они там хотели сделать :)
yopp
С последним связываться не рекомендую, можно случайно диссертацию написать
yopp
Не забудьте скинуть в чят работу с которой защищались :))))
Morant
Yasi
Do you have idea about aggregation slow query logs mongodb? On graylog or any exporter
I need aggregate all mongodb slow query and collscan on Prometheus
Александр
насколько эффективно используются индексы при использовании регулярок? Если у меня поле _id такого вида "some_type#123#2022-08-22_23:27:46.199" и я использую регулярку "some_type#123#.*" то не приведет ли это к полному сканированию индекса и проверке каждого ключа на соответствие?
yopp
yopp
В некоторых случаях планировщику нужно явно указать что поиск по префиксу используя квантификаторы ^ или \A
yopp
Проверить план и выполнение запроса можно через explain({executionStats: 1})
yopp
Там будут поля keys scanned, по которым будет видно селективность условия
Сергей
добрый день всем.
не получается удалить ноду из репликасет.. висит и ничего не делает..
подскажите, что можно сделать?
DG
выключить с автозагрузки монгу и будтнуть сервер
Нурлан
привет ребят как я понял _id больше у того кто был добавлен в бд позже, а можно ли также сравнивать, но в монгусе?
Aleksey
Нурлан
+
Нурлан
сравнивает референсы
Нурлан
мне прост нужно с кеша найти документ монгоДб по айди
Нурлан
линейно не охото, хочется О(logn)
Нурлан
отпишусь позже
Харамбус
кто то сталкивался с таким?
MongoError: Plan executor error during findAndModify :: caused by :: WriteConflict error: this operation conflicted with another operation. Please retry your operation or multi-document transaction.
Anonymous
Hello there, guys I have one question about the search index in MongoDB Atlas Search, could we create it by query? I am able to create by mongo db cloud, but I want to create a search index in pymongo?
who knows about it?
Нурлан
u mean create index for model?
Нурлан
idk how it is on python ,but in node js it is like this
Нурлан
i think same
Нурлан
i can check it
Нурлан
here i got collection, i delete it and create with node js agaiin
Anonymous
I mean the creation of search_index is the same with index here,?
Anonymous
Нурлан
only by id
Anonymous
only by id
i know creating index, but i am looking for creating text search_index in MongoDB atlas search
Нурлан
oh
Нурлан
k
Нурлан
interesting
Нурлан
so you want to search by text yeah?
Нурлан
i dont understand eng clearly
Anonymous
so you want to search by text yeah?
yep there is Mongodb atlas search, and there is $search aggregate function, if we are going to work with this function, we should create search_index. So I am inserting it manually from MongoDB cloud right now and looking for ways to create by query
Арби
всем доброе утро.
у меня есть коллекция блюд, как мне найти все блюда, которые содержат ингредиенты "Яблоко" и "Апельсин"?
Ми
Арби
Харамбус
{ "ingredients.name": { $in: ["Яблоко", "ЕщеФрукт"] } }
Арби
Арби
смотрите, пользователь прислал список ингредиентов:
['Арбуз', 'Ананас', 'Виноград', 'Яблоко', 'Банан']
как мне в коллекции найти все блюда, которые он может из них приготовить?
чтобы блюдо не содержало больше ингредиентов, чем из этого списка, но меньше может, т.к. условно если будет блюдо из яблока и ананаса, я могу его приготовить из выше перечисленных ингредиентов
Kobo
Подскажите, в MongoDB можно добавить поле в существующий документ, но чтобы оно было не в конце документа, а между существующими полями
Kobo
Я просто с деревни
Харамбус
Kobo
А зачем?
с эстетической точки зрения
Kobo
$set может вставлять только в конец документа?
Харамбус
Структура коллекции опирается на принципы джсона
Харамбус
Не советую опираться на порядок ключей..
Харамбус
Хотя скорее всего я не прав, копайте сами)
Харамбус
А ты монгус юзаешь?
Kobo
Харамбус
В любом случае есть плагины которые сортируют ключи при записи
Харамбус
Чекни
KobylkinAnton
Всем привет, может кто подсказать как отобразить все активные процессы в виде таблицы. Пытаюсь на поде в кубере через currentOp, но отображает в виде огромного нечитаемого полотна в виде запросов, что очень неудобно.
также может кто знает, можно ли задать какой-то триггер, на то, чтобы убивались запросы повисающие больше 5мин
Semeon
У меня такой вопрос, господа.
Мне нужно по конкретному полю найти совпадение в коллекции. И если совпадение найдено, вернуть true. Если не найдено, то false. Какой метод для этого можно использовать?
Bekzhan
Всем привет, есть таблица с салоном у каждой организации свой салон, внутри салона массив из объектов машин.
Пытаюсь сделать запрос, найти и вытащить 1 объект машины.
синтаксис из языка голенг,
filter := bson.M{"_id": salonId, "cars._id": carId},
res, err = db.salons.findOne(context, filter )
res.Decode(&car);
Ошибку о том что не найдено не пишет, и в сам объект машины не записывает результат.
Подскажите, может я запрос не правильно кидаю
Харамбус
Харамбус
Всем привет, есть таблица с салоном у каждой организации свой салон, внутри салона массив из объектов машин.
Пытаюсь сделать запрос, найти и вытащить 1 объект машины.
синтаксис из языка голенг,
filter := bson.M{"_id": salonId, "cars._id": carId},
res, err = db.salons.findOne(context, filter )
res.Decode(&car);
Ошибку о том что не найдено не пишет, и в сам объект машины не записывает результат.
Подскажите, может я запрос не правильно кидаю
Приведи salonid/carid к objectid
Bekzhan
а примеры есть, как это делать?
Bekzhan
я просто в монге пару дней как
Bekzhan
ссылки на прмиеры