Як працює повнотекстовий пошук? Розбираємо на практиці інвертовані індекси

Поделиться
HTML-код
  • Опубликовано: 22 ноя 2024

Комментарии • 132

  • @petrokopyl9581
    @petrokopyl9581 Год назад +50

    Це найкраще відео, що я бачив з цієї теми. компетенції автора можна тільки позаздрити і поставити собі на мету її досягти! Дякую ❤

  • @TentakliUA
    @TentakliUA 10 месяцев назад +1

    Серія відео по базам даних це якась суцільна насолода. Дуже часто платні курси не покривають поглиблених нюансів, а тут все ще й безкоштовно. Дякую!

  • @vladyslavkarpenko9372
    @vladyslavkarpenko9372 Год назад +7

    Кожне ваше відео додає впевненості щодо наявногоу вас чудового поєднання практичної кваліфікації та вміння ділитись досвідом👏🏻

  • @buteskul
    @buteskul 11 месяцев назад +3

    Величезне дякую, за вашу працю, ваш канал просто знахідка. Дуже круто поданий матеріал, у вас талант)) В попередньому році в університеті частково проходили тему з HDFS, і до кінця не було зрозуміла логіка Map-Reduce, ви за декілька хвилин пояснили сенс:)

  • @alex-v7e6v
    @alex-v7e6v 9 месяцев назад +1

    ого оце якість, мені здається таких каналів або дуже мало або узагалі не має. Дуже дуже дякую за всі відео на каналі

  • @horrorua_
    @horrorua_ Год назад +3

    тільки нещодавно задавався питанням про повнотекстовий пошук ,як раз відео

  • @vadimgrechin8678
    @vadimgrechin8678 11 месяцев назад

    Неймовірно! Просто неймовірно. За академічну годину прояснити досить непросту тему та ще й з адекватними прикладами і кодом.
    Дякую, що ділишся глибоким розумінням теми і практичним досвідом!

  • @olexiy-not-alexey
    @olexiy-not-alexey 9 месяцев назад +1

    Все по полочках розклав, дякую! Еластіксерч став зрозуміліше)

  • @sanctosx
    @sanctosx Год назад +1

    Унікальний контент. Теорія і практика просто і доступно.

  • @hektq
    @hektq Год назад

    Дуже дякую! Гарне відео!
    Тепер потрібне відео про усі популярні методології компресій

    • @AboutProgramming
      @AboutProgramming  Год назад +1

      Згадував цілий пейпер з різними алгоритмами в другій частині про інвестовані індекси. Відео зараз для патронів, але ось посилання на сам пейпер arxiv.org/pdf/1908.10598.pdf 🙂

  • @everysomebody
    @everysomebody 3 месяца назад

    Я просто кайфую з глибини розбору матеріалу. Я на цю тему вже бачив мільйон відео, де просто намалювали діаграмку і все. В той час як Віктор за 45 хвилин показав до деталей що і як працює, ще й написав власну реалізацію) Найжирніший лайк, підписка і дзвіночок. Ваші відео це опіум для мого мозку!

    • @AboutProgramming
      @AboutProgramming  3 месяца назад

      Дякую за такий позитивний відгук)

  • @shinobi_313
    @shinobi_313 10 месяцев назад

    дякую, за вашу роботу, Віктор! ви - крутий:)

  • @artemkerez2152
    @artemkerez2152 Год назад

    Я фронт, але вже хочу вчити бек) Мега інформативно! Буду дивитись всі відоси підряд і всі лайкати по дефолту) дякую!

  • @MegaVladikslavman
    @MegaVladikslavman Год назад +10

    Дякую за відео, кожну тему дуже цікаво розповідаєте! Якщо можливо, викладайте відео частіше - у вас круто виходить пояснювати складні теми. Окреме дякую за практичну частину

  • @oleksandrvorovchenko8674
    @oleksandrvorovchenko8674 Год назад

    Дякую за детальні, але при цьому прості і зрозумілі пояснення!

  • @4opper1
    @4opper1 Год назад +2

    супер, дуже круто пояснюєш і головне є код і практика, а не лише теорія! дякую

  • @AdminAdmin-sl2qf
    @AdminAdmin-sl2qf 8 месяцев назад +1

    ❤❤❤❤❤❤❤❤❤❤❤

  • @atsybulsky
    @atsybulsky Год назад +2

    Кльовий відос. Дуже доступно і без води. Віктор, дякую за цікавий контент :)

  • @romankopylov5013
    @romankopylov5013 Год назад

    Супер цікава тема! Дякую 😎

  • @НазарЄрмоленко-ф8ю

    Круто, дуже повчально, дуже зрозуміло та гарно пояснено, та продемонстровано! Дуже якісне відео, продовжуйте викладувати, дуже ціную вашу роботу!

  • @Nikolaevichful
    @Nikolaevichful Год назад

    Дякую, дуже інформативне і просте для сприйняття відео.

  • @mykhailokozlov6641
    @mykhailokozlov6641 11 месяцев назад

    Це топ! Дякую вам!

  • @LembergThe
    @LembergThe Год назад

    Доступно, практично, цікаво. Дякую за хороший навчальний матеріал і мотивацію до підвищення кваліфікації

  • @romanyukartem757
    @romanyukartem757 Год назад

    Дякую за розбір цікавої теми! Відео ТОП.
    P.S. (є чудовий command-line client для роботи із БД - mycli, раджу спробувати)

  • @YuriiOkunets
    @YuriiOkunets Год назад

    Клас. Кайфую з кожного відоса, дуже корисно!

  • @Andrii_O
    @Andrii_O Год назад

    Дуже дякую, топ!

  • @НазарійПивовар
    @НазарійПивовар Год назад +1

    Дякую за відео, дуже якісно і цікаво)

  • @andreyreznik4992
    @andreyreznik4992 10 месяцев назад

    гарне відео, дякую

  • @АндрійКладочний-ш9ц

    Дуже потужне відео. Дякую!

  • @АнтонЗубілевич
    @АнтонЗубілевич Год назад +1

    Топовий Контент

  • @BorysYermokhin
    @BorysYermokhin 8 месяцев назад

    дуже круто! дякую велике за таку цікаву інформацію!

  • @dmytrokucheriavyi605
    @dmytrokucheriavyi605 Год назад

    Надзвичайно корисний матеріал!

  • @blazheiko777
    @blazheiko777 Год назад

    дуже цікаве відео, дякую

  • @Oleksii-c9h
    @Oleksii-c9h Год назад +1

    Надзвичайно цікаво та максимально корисно! Дякую за контент

  • @frontenda4284
    @frontenda4284 Год назад +1

    Дякую за нові знання)

  • @abrevior
    @abrevior Год назад

    Дякую за відео, як би було круто якби такі речі розповідали ще в університетах і так само якісно.

  • @ЯрославГавриленко-ъ7к

    Як завжди все на вищому рівні. Дякую за цікавий та корисний контент. Чекаємо на наступний випуск)

  • @jses8560
    @jses8560 Год назад +1

    Крутяк. Дуже дякую за такий матеріал.

  • @andriivovnenko4748
    @andriivovnenko4748 Год назад +1

    Як завжди цікаво і як ніколи вчасно. Дякую)

  • @RomanJScricket
    @RomanJScricket Год назад

    Шикарне відео!!! Зрештою, як і всі попередні.
    Бракує таких викладачів в університетах, не кажучи, вже про «псевдо курси».
    Дякую, що знаходите час ділитися своїми знаннями і досвідом!

  • @igor-6930
    @igor-6930 Год назад +1

    Дуже круте відео!

  • @ВиталийПервий
    @ВиталийПервий Год назад +1

    Дуже цікаво, дякую!

  • @roman.koliada
    @roman.koliada Год назад

    Круте відео, дякую. Не знаю, як у ноди з оптимізацією, тому можу порадити кілька мікрооптимізацій: 1) створювати сет стоп слів один раз, а не при кожному виклиці функції 2) використовувати reduce замість filter+map для функції tokenize 3) змінити регулярку в функції stemmer, зараз вона не прибирає останню букву s, тому підозрюю, що exact пошук по `inelegantly drop hum` нічого б не знайшов

    • @AboutProgramming
      @AboutProgramming  Год назад +1

      Думаю, що особливо різниці не буде в загальному перформансі. Але є посилання на код в описі, тому є можливість протестувати 🙂

  • @MaksymKotov-e8s
    @MaksymKotov-e8s Год назад

    Неймовірно якісне та інформативне відео! Дякую ❤

  • @yurii_zh
    @yurii_zh Год назад +1

    Прикольно. Як завжди цікаво, хоча особисто для себе мало нового дізнався, бо якраз недавно працював над цим і розібрався у темі. Але якби подивився таке відео раніше, то це було б дуже корисно.

  • @voltstas
    @voltstas Год назад

    Це найкраще відео на ютубі) Дякую Віктор! Було не просто цікаво, було захоплююче

    • @MasterSergius
      @MasterSergius Год назад

      Ну ні, найкраще відео на ютубі це ось це ruclips.net/video/VGRQGm4-A4k/видео.htmlsi=SpsxQL_xipsV1Y8R

  • @СтасГаврилюк-в3ь

    Гарне відео

  • @PonomarenkoO
    @PonomarenkoO Год назад

    Дякую!

  • @antonyasynetskyi1312
    @antonyasynetskyi1312 Год назад +1

    Дуже класне відео - просто і зрозуміло. Хотілося б ще відео по MapReduce/Hadoop/Spark..

  • @oleksandrmartyshchenko5366
    @oleksandrmartyshchenko5366 Год назад

    Дуже круті відео та подача, браво

  • @matash149
    @matash149 Год назад +2

    Як завжди, крутий контент, і те що поки-що так мало лайків і переглядів дивує, а з іншої сторони тішить, меньше конкурентів на цьому ринку )))

    • @AboutProgramming
      @AboutProgramming  Год назад +4

      Дякую! Ціль - зробити ютуб канал, де інженери зможуть покращити свої фундаментальні знання - й такі знання не втрачають актуальності й через роки. Можливо контент не самий хайповий, але він не застаріває, тому впевнений, що ще набере свої перегляди :)

    • @matash149
      @matash149 Год назад +1

      @@AboutProgramming хайпового контенту дуже багато, а унікального, якісного україномовного по програмуванню можна на пальцях однієї руки нарахувати. В деяких авторах україномовний контект починаєтсья і закіньчуєтсья словами "ми з України" (хоча і сам контент цікавий). Так що ваша ціль важлива.

  • @Taronimus
    @Taronimus Год назад

    Після усіх попередніх відео пазл склався) якщо до цього моменту по темі була лиш база, то тепер вже провиднюється межа, за якою лежать специфічні знання.

  • @m1kalos460
    @m1kalos460 Год назад

    дякую

  • @МаксимНазаров-э7ю
    @МаксимНазаров-э7ю Год назад +1

    Невероятно просто и понятно. Огромное спасибо за контент ) Надеюсь видео будут появляться и дальше в стабильном режиме) Успехов тебе 😊

  • @serginyo90
    @serginyo90 Год назад

    Отличная подача. Благодарность автору

  • @Dr.YaroslavZhbankov
    @Dr.YaroslavZhbankov Год назад +2

    Дуже цікавий та зрозумілий розбір, круте відео вийшло. Якщо можна, то як ідея для ще одного - це просторові індекси. Дякую!

    • @AboutProgramming
      @AboutProgramming  Год назад +1

      О, дякую! Це дуже класна тема. Можна розповісти про той самий Quad tree й в контексті гео пошуку, так й в контексті інших застосувань. Ну й розібрати той самий R tree

  • @MyQuickChannel
    @MyQuickChannel Год назад +1

    дякую!!!

  • @howtosimple_
    @howtosimple_ Год назад

    та ти крутий чувак)))😎

  • @Sun1ive
    @Sun1ive Год назад +1

    дякую за відео

  • @overshom
    @overshom Год назад +3

    Дякую, легко зрозумів концепції. Питання - яку можна зробити компресію якщо ід документа ююід?

    • @AboutProgramming
      @AboutProgramming  Год назад +1

      Додати додаткове не UUID поле в таблицю. Так робить той самий MySQL - dev.mysql.com/doc/refman/8.0/en/innodb-fulltext-index.html#innodb-fulltext-index-docid

    • @AboutProgramming
      @AboutProgramming  Год назад +2

      або окремий мапінг з INTEGER на UUID. Це буде сильно дешевше, оскільки UUID документа буде зустрічатися стільки разів в інвертованому індексі, скільки є слів/токенів в документі

  • @ON-yg7cm
    @ON-yg7cm Год назад

    🤝🤝🤝

  • @sashamalinovski8059
    @sashamalinovski8059 Год назад

    Чудовий контент, побільше би таких публікаці .🔥
    Доречі, що використовуєте для малюваля?

    • @AboutProgramming
      @AboutProgramming  Год назад

      Дякую!) Малюю в стандартному софті на Galaxy Tab

  • @shchekavytsia
    @shchekavytsia Год назад

    Супер відео! 👍👍👍 є питання від чайника: індекси для всіляких blob/longblob, varchar(max) мають будуватись за іншими принципами? Чи різниці в підході нема?

    • @AboutProgramming
      @AboutProgramming  Год назад +1

      Концептуально різниці немає. Але пару невеликих особливостей є, які зумовлені розміром даних. blob й text занадто великі, щоб їх класти в індекс (зараз про додаткові індекси) - тому в індекс можна помістити тільки частину блобу (тобто треба вказати довжину, яку взяти при створенні індексу). Але тоді виникає питання, як бути з кластерними індексами, якщо кластерний індекс й є наші дані й ми не можемо зберігти лише частину даних. Тому тут поведінка така, якщо розмір даних в межах певних лімітів, то зберігаємо в кластерному індексі, якщо за межами ліміту, то в індексі зберігаємо вказівник на блоб, а сам блоб в окремих сторінках даних (щось схоже на файлову систему виходить)

  • @bracer2709
    @bracer2709 Год назад +2

    Відео супер, дякую автору. Вікторе, ви робите дуже корисну справу!
    Не зрозумів лише одне по відео: якщо ми шукаємо не все слово всередині опису товару, а, наприклад, якийсь склад, як в такому разі має будуватись індекс?
    Умовно маємо:
    Id, description
    1, best clocks you ever wear
    2, some socks for your family
    Конкретний приклад працює лише для слів. А якщо юзер буде шукати %ock%?

    • @AboutProgramming
      @AboutProgramming  Год назад +1

      Дякую за відгук :) Відносно пошуку по складу, то це залежить від токенайзера. Наприклад, можна використати ngram tokenizer. Тоді слово family буде розбите на наступні токени біграми (беремо 2 літери після кожного символу): fa, am, mi, il, ly. Й тоді, коли йде пошук по "mil", то будуть шукатися токени mi, il (або для пошуку можна задати інший токенайзер, не той, що викоритовувася для індексу). Також можна написати токенайзери під специфічні задачі, наприклад щоб індексувати тегі або url розбивати на частинки. Основна ідея, що з пошуком особливо не вигадаєш, а от в індекс можна класти будь-що :)
      Ну, й ngram tokenizer сильно збільшить розмір індекусу, оскільки у нас значно зросте кількість токенів в індексі

    • @bracer2709
      @bracer2709 Год назад +2

      @@AboutProgramming дякую! Ось цей момент і цікавив. Що якщо ми розбиваємо по складам, то виходить в рази більше данних в індексі.

  • @ПавелБабич-э2ф
    @ПавелБабич-э2ф Год назад

    GO UA!

  • @BorysYermokhin
    @BorysYermokhin 8 месяцев назад

    цікаво скільки би вийшло якщо відмовитись від base64 і наприклад додавати після кожного слова довжину бінарної строки. Класне відео, аж самому захотілось так поексперементувати. Ще раз дякую!

    • @AboutProgramming
      @AboutProgramming  8 месяцев назад +1

      Є ще спонсорське відео (продовження), в якому я придбав base64 й розбив індекс на два файли. Вдалося зменшити відповідно розмір індексу й зробити дешевшим бінарний пошук по словам

  • @maul8385
    @maul8385 11 месяцев назад

    Пане Вікторе, дуже дякую за відео, дізнався багато чого нового. Не зрозумів один момент: як ми змогли суттєво зменшити розмір файлу після дельта компресії, якщо числа, як Ви сказали потім, зберігаються у 32/64 байтах. Економія завдяки комбінації методів дельта компресії та vbyte очевидна, а от тільки завдяки компресії, не до кінця.

    • @AboutProgramming
      @AboutProgramming  11 месяцев назад +1

      Дякую!) Відносно дельта компресії гарне питання. Число займає 32/64 біти в пам'яті процесу, але при серіалізації в JSON короткі числа займають менше місця, бо JSON це просто строка. Наприклад, число 5 це один символ й відповідно один байтів, а число 1000000000 десять символів й відповідно десять байтів

    • @maul8385
      @maul8385 11 месяцев назад

      @@AboutProgramming Дуже дякую

  • @Karvaton
    @Karvaton 11 месяцев назад

    З ваших пояснень стає все на багато зрозуміліше і на дахає копатися ще глибше. Чи не могли б ще розповісти про нереляційні БД?

    • @AboutProgramming
      @AboutProgramming  11 месяцев назад +1

      Там всередин в цілому те саме. Хоча Redis цікаво реалізований, можливо про нього треба зробити якось відео

    • @Karvaton
      @Karvaton 11 месяцев назад

      @@AboutProgramming а як щодо касандри?

    • @AboutProgramming
      @AboutProgramming  11 месяцев назад +1

      База цікава, але дуже небагато проектів її потребують

  • @b0dn4r_K
    @b0dn4r_K 10 месяцев назад

    Я гадаю що замість того щоб окремо компресити - потрібно початково писати код який буде в норм форматі/структурі на виході. Також, думаю, що дельта компресія тільки гірше швидкості пошуку може зробити, без неї можливо швидше шукатиме

    • @AboutProgramming
      @AboutProgramming  10 месяцев назад

      Буду радий побачити робочий приклад) Інвертоааний індекс це й є структура, яка передбачає, що у нас є слова й списки айдішек до них. Можна змінити формат серіалізації, щоб прибрати base64 (робив в іншому відео), але структура залишиться така сама. Відносно дельта компресії, то можете протестувати, але ймовірно, що буде тільки повільніше, бо треба буде читати більше даних з диску. Дельта компресія це ключова вимога для всіх інших видів компресії, бо вони вимагають малих чисел. Ось гарний аналіз на цю тему arxiv.org/pdf/1908.10598.pdf

  • @ArtemLisun
    @ArtemLisun Год назад

    Это... Просто... Ахуенно...
    Еще можно проиндексировать сами слова индексы и можно обгонять FTS :D

  • @dr1n
    @dr1n 10 месяцев назад

    Хочу поставити 2 лайки або навіть 3)

  • @yurii_zh
    @yurii_zh Год назад

    для ElasticSearch є плагін Ukrainian analysis. Але по ньому щось немає ніякої інформації. Хтось із цим працював? Може знаєте, де можна більше інформації про нього знайти? Можна якось кастомно задати токенайзер для українського аналізатора?

    • @AboutProgramming
      @AboutProgramming  Год назад +2

      Думаю, можна просто підключити будь який токенайзер написавши свій analysis плагін. Відносно Ukrainian analysis, то ніби він там просто юзає Morfologic github.com/elastic/elasticsearch/blob/f42b7652bfb4949630347558fc4cae90926cb388/plugins/analysis-ukrainian/src/main/java/org/elasticsearch/plugin/analysis/ukrainian/UkrainianAnalyzerProvider.java#L19
      Ось - lucene.apache.org/core/7_3_0/analyzers-morfologik/org/apache/lucene/analysis/uk/UkrainianMorfologikAnalyzer.html
      Але сам я з цим плагіном не працював 🙂

  • @kamurashev
    @kamurashev 3 месяца назад

    Цікаво, чому будували цей кастомний солюшн що згадується у відео? Маю на увазі що була за вимога що вирішили не юзати наприклад еластік або вбудований фт індекс існуючих дБ?

    • @AboutProgramming
      @AboutProgramming  3 месяца назад +1

      Зазвичай на більшості проектів ми використаємо еластік, але тут були дещо специфічні вимоги й необхідність більшого контролю над форматом. В цілому це сотні терабайт даних, сотні різних індексів й аналітичні запити. Зараз elastic краще став й можливо б використовували б його, але не факт. Подобалася ідея, що не треба тримати дорогої інфраструктури - все просто на S3. Наприклад, Hadoop кластер був на S3, а не HDFS, що дозволяло створювати сервера тільки на момент обробки даних. Аналогічно якщо розбити індекс на два файли - в одному просто слово й зміщення в іншому файлі (по ньому робити бінарний пошук), а в іншому файлі тільки індекс (читаємо тільки зміщення), то можна індекс на сотні терабайт тримати на S3 й обробляти запити невеличким сервісом, а не платити за compute

    • @kamurashev
      @kamurashev 3 месяца назад

      @@AboutProgramming 👍, просто з цікавості спитав. Я працював на одному проекті де треба etl то ми також ранили на on-demand Hadoop (AWS EMR), хоча там такий треш що наврядче це гарний приклад але ідея зрозуміла.

  • @gradient8516
    @gradient8516 Год назад

    +

  • @MykolaZolnikov
    @MykolaZolnikov 11 месяцев назад

    скільки зараз може отримувати програміст SQL початківець та на скільки важко влаштуватися на роботу ?

    • @AboutProgramming
      @AboutProgramming  11 месяцев назад

      Роботу початківцю зараз дуже складно. Відносно SQL, то це зазвичай одна з навичок потрібна для програміста чи дата аналітика. Відносно ЗП, то на DOU є гарна аналітика з фільтрами по рокам досвіду й по профілю jobs.dou.ua/salaries/

  • @oleksiymiyskiy4694
    @oleksiymiyskiy4694 2 месяца назад

    А приклад леметизатора є? Був би вдячний

    • @AboutProgramming
      @AboutProgramming  2 месяца назад

      Був в NLTK наскільки пам'ятаю для англійської. Для української не пам'ятаю чи є щось (стемери точно є), для російської є mystem, який працює по морфологічним правилам. Але я так давно дивився на них, що й не пам'ятаю. В більшості випадків стемер підходить

    • @oleksiymiyskiy4694
      @oleksiymiyskiy4694 2 месяца назад

      @@AboutProgramming а є щось подивитись як для української мови стеммер зробити? Хотілось наш пошук на сайті покращити в рази. Використовуємо базу постгрес. Бо в нас пошук по назві документу і по вмісту документу.
      Був би дуже вдячний. Або почитати як самому його зробити

    • @AboutProgramming
      @AboutProgramming  2 месяца назад

      @@oleksiymiyskiy4694 знаходив таке github.com/amakukha/stemmers_ukrainian , але щоб конкретне порадити, то складно. Якщо потрібен просто пошук, то ніби є під еластік готове www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-ukrainian.html

  • @igor-6930
    @igor-6930 Год назад +1

    Як ідея для наступного відео - як працює реплікація даних коли в тебе є декілька data storage. Наприклад основна БД - MySQL для OLTP а Elasticsearch для хитрого пошуку.

    • @AboutProgramming
      @AboutProgramming  Год назад +6

      Тут складно щось конкретне розповісти, бо це буде сильно залежати від нюансів проекту. Тобто в залежності від задачі можна прийти до зовсім різних архитектур. Але як варіант можна зробити відео про реплікацію й шардінг як просто концептів й розібрати різні варіанти імплементації

  • @anton.plotkin
    @anton.plotkin Месяц назад

    А звичайний індекс для запитів типу LIKE '%word' теж працювати швидко не буде, не тільки для LIKE '%word%' тобто сортування зворотнє він же не вміє?

    • @AboutProgramming
      @AboutProgramming  Месяц назад

      Звичайний індекс може працювати, але це має бути ще один індекс по reverse(column) ну й відповідно треба робити reverse на запит. Відносно зворотнього сортування, то можна зробити через desc в описі індексу, але це не про перевертання строк й відповідно не допоможе для цього кейсу

    • @anton.plotkin
      @anton.plotkin Месяц назад

      @@AboutProgramming ну я саме про це і питав, що той індекс який в нас створений на поле name він не працює для такого запиту (зворотнім сортуванням назвав саме сортування по реверсу), просто з відео чогось зрозумів, що він має працювати і що не можна шукати лише по %word%. Тепер зрозумів, що треба створити інший індекс для цього.

  • @_dyats
    @_dyats Год назад

    А що якщо ми додамо новий рядок в БД, нам ж не треба перетворювати цілий індекс?

    • @AboutProgramming
      @AboutProgramming  Год назад +1

      Залежить від того, як він збережений. Той самий sphinx колись вимагав повної перебудови, а потім додали інкрементний апдейт. Тобто перебудовувати весь може й не треба, але додаткові дані треба додати й тоді треба буде вигадувати якусь блочну системи зберігання даних, щоб можна було перезберігати тільки специфічні блоки. Або використовувати sparse матрицю (наприклад, hbase) для зберігання індексу й тоді можна оновлювати все в реальному часі . Якщо ми використовуємо full text search фічу бази даних, то там вона працює з блоками завжди й там інкрементальна перебудова

  • @PetrO465
    @PetrO465 9 месяцев назад

    чого stemmer не називають normalise? чи називають ?

    • @AboutProgramming
      @AboutProgramming  9 месяцев назад

      Normilise це просто ширше поняття. Наприклад, приведення до нижнього регістру це теж нормалізація. Тобто нормалізація може включати крок стемінгу, а може й не включати. Також замість стемінгу може використовуватися лематизація

  • @serhiirudenko5387
    @serhiirudenko5387 11 месяцев назад

    на кожний пук в таблиці перезаписувать більше 1гб на такій к-ті даних, ну хз, можливо є краще рішення

    • @AboutProgramming
      @AboutProgramming  11 месяцев назад +1

      Це найпростіша схема збереження, але можна мати блочну структуру й оновлювати частину файлів. Різні імплементації працюють по різному. Той самий sphinx колись вмів тільки повністю перебудовувати індекс, зараз підтримує інкрементний апдейт. Насправді, insert нового документа не така велика проблема, а от модифікації це проблема (той самий еластік не дозволяє апдейти, але можна зробити інсерт нової версії). Але так, навіть інсерт вимагатиме апдейту великої кількості блоків, бо треба оновити індекс для кожного токена з документа, тому часто дані пишуться в пам'ять й періодично флашаться на диск (але так працює навіть звичайний інсерт в таблицю в MySQL)

  • @Sernuzh
    @Sernuzh 10 месяцев назад

    Цікаво чи користуються великі компанії самописними індексами. Хотів би ще попросити якщо буде у вас можливість створити відео про роботу пошти. А саме протоколи, безпека, відправка з локальної машини на лінуксі.

    • @AboutProgramming
      @AboutProgramming  10 месяцев назад

      Відносно індексів.
      Якщо компанія створює індекси, то це по сути власний механізм зберігання й пошуку по даним, тобто власна база даних й це часто зустрічається (rocksdb, dynamodb, spanner, documentdb, mssql etc). Якщо питання саме про повнотекстові індекси, то Google й Microsoft точно роблять, бо у них є пошук. У Facebook є Graph Search. Часом це повноцінні системи написані з нуля, часом це якісь системи, які використовують якісь бібліотеки по типу Lucene, як це робить Elastic. Але це значна інвестиція й в більшості випадків просто беруть готове рішення.
      Відносно відео про пошту. Може бути цікава тема, доводилося приймати участь в розробці декількох поштових систем. Дякую за ідею :)

  • @mityabor
    @mityabor Год назад

    Вцілому Python більш наочно виглядає ніж JavaScript.

    • @AboutProgramming
      @AboutProgramming  Год назад

      Не сперечаюся, але JS має плюс, що його розуміє більша аудиторія й можна робити приклади й для фронту. Ну, й я маю досвіду більше з JS 🙂

    • @KlinovAS
      @KlinovAS Год назад

      погоджуюсь з "виглядає" та зовсім не практичний по швидкодії. Не знаю як зараз, але попередня версія була повільнішою в 10 раз в тестах з простими циклами. Загалом якщо поставит руку на серце і відповісти на запитання чим відрізняються мови програмування, то відповідь буде: зручністю роботою з масивами та об'єктами. Все інше повторюється, але швидкість виконання у кожного різна. На диво JS працює супер швидко. Робив власні тести на 5 мовах в тому числі і Пайтон, який найбільше розчарував. Однак нейронку писати зручно на Пайтон, оскільки там ми й використовуємо зручність і простоту роботи з масивами. Це університетська мова, зручна для викладання, презентацій

  • @UAFMeyer
    @UAFMeyer Год назад

    Цікаво що робити, якщо в слові граматична помилка. В українській мові це не велика проблема, а от в англійській чи німецькій, мені здається це дуже поширено, коли важко правильно написати слово. Доволі популярне “treat or trick” клієнтом може бути просто неправильно написано. Наче як ElasticSearch має повернути якісь результати, але з нижчим score. Та й у Google певно також має бути якийсь механізм пошуку по помилково написаним словам? 🤔 чи це stemmer якось вирішує заміняючи слова на граматично правильні? Чи слова бʼються на частини, а потім ці частини порівнюються?

    • @AboutProgramming
      @AboutProgramming  Год назад +1

      Гарне запитання. По ідеї, це можна робити на етапі стемінгу, але це може бути просто окремий крок в пайплайні. Також в пайплайн можна додати й фонетичну обробку, щоб шукати по вимові, наприклад. Також слова не обов'язково заміняти, а можна зберігати відразу декілька варіантів

    • @UAFMeyer
      @UAFMeyer Год назад

      @@AboutProgramming Я так розумію однозначно правильного рішення тут прям немає і треба дивитися що краще працює? Фонетична обробка звучить не тривіально, а зберігати одразу декілька варіантів значно збільшить розмір індексу. Цікаво як саме Google вирішує цу проблему?

    • @AboutProgramming
      @AboutProgramming  Год назад +1

      @@UAFMeyer відносно Гугла, то таких деталей навіть не й знаю. Там пошук значно складніший, той самий knowledge graph, який намагається працювати з сенсом слова й багато всього іншого

    • @UAFMeyer
      @UAFMeyer Год назад

      @@AboutProgramming Дякую. Треба буде почитати детальніше про це все 👍

  • @itsimplified
    @itsimplified Год назад

    Дуже цікаве і корисне відео. Але є недоліки.
    Автор занадто відхилився в сторонні теми, якось підзабувши про власне повнотекстовий пошук.
    І найгірше, упустив головний нюанс повнотекстового пошуку - relevance score, тобто сортування по релевантності.
    Повнотекстовий пошук не для того, щоб вибрати якусь підмножину з множини всіх документів. Ні, він може повертати навіть ВСІ документи - але посортовані по релевантності.
    Грубо кажучи, якщо є веб магазин де в описі одного товару - нехай це буде книга - слово макроекономіка зустрічається один раз, а в описі іншого - два рази, то при пошуці по цьому слову мають повернутись обидва товари, але другий із вищою релевантністю, тобто першим в результатах.
    Ну і звичайно є ще важливі фічі у ElasticSearch які дає Lucene - fuzzy пошук та facets, про які варто було розказати.

    • @AboutProgramming
      @AboutProgramming  Год назад +1

      Для мене головне як влаштований індекс, а як працює сортування результатів, то вже додатковий аспект. Відео й так найдовше на каналі вийшло 🙂 Сортування в різних системах часто працює по різному. Наприклад MySQL in boolean mode взагалі не використовує relevance score. У Google для relevance score є knowledge graph й page rank. Той самий sphinx спочатку мав одні режими запитів, а потім був розширений більш складними й тд. Також не було задачі розповісти про якийсь рушій для пошуку, а показати, що всередині концептуально. Демо реалізації власного алгоритму ранжування не було б таким корисним в межах цього відео. А розповідати про facets, це як розповідати про джойни в відео про B-tree індекси. Але так, згадати, що таке є, можна було б в відео. Дякую за коментар

    • @itsimplified
      @itsimplified Год назад

      @@AboutProgramming Це не питання лише сортування - як сортування по якійсь колонці в реляційних базах. Суть змінюється якщо query повертає всі документи.
      "Наприклад MySQL in boolean mode взагалі не використовує relevance score"
      Власне. Бо це реляційна база а не повноцінний full text search engine.

  • @VIPTECH1979
    @VIPTECH1979 Год назад

    Привіт цікаві відео, ось тема яка можливо також була б цікава webrtc, дякую за контент