Президентская программа(вечер) Александра Калашникова Иван Шестаков Максим Коротков
PG Day'14 Russia, Индексный поиск по регулярным выражениям,...
-
Upload
pgdayrussia -
Category
Software
-
view
179 -
download
5
description
Transcript of PG Day'14 Russia, Индексный поиск по регулярным выражениям,...
![Page 1: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/1.jpg)
Индексный поиск по регулярным выражениям
Александр Коротков Интаро Софт
![Page 2: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/2.jpg)
Введение
![Page 3: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/3.jpg)
Регулярные выражения
• Мощный инструмент обработки текстовой информации
• Основаны на математической лингвистике
• Выражают тот же класс языков, что и лингвистические автоматы
![Page 4: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/4.jpg)
Автоматы… нет, не слышал
![Page 5: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/5.jpg)
Итак… автоматы
• Регулярное выражение может быть преобразовано в лингвистический автомат
• Такое преобразование используется в «движках» регулярных выражений
![Page 6: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/6.jpg)
Итак... автоматы • Автомат – это ориентированный граф, вершины которого – «состояния», а дуги – «переходы», помеченные символами.
• Выделяются начальное состояние и конечное состояние
• Автомат «читает» строку.
![Page 7: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/7.jpg)
Пример
/a(bc)*d/
становится
![Page 8: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/8.jpg)
Пример
xyzabcbcdxyz
![Page 9: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/9.jpg)
Пример
xyzabcbcdxyz
![Page 10: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/10.jpg)
Пример
xyzabcbcdxyz
![Page 11: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/11.jpg)
Пример
xyzabcbcdxyz
![Page 12: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/12.jpg)
Пример
xyzabcbcdxyz
![Page 13: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/13.jpg)
Пример
xyzabcbcdxyz
![Page 14: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/14.jpg)
Пример
xyzabcbcdxyz
![Page 15: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/15.jpg)
Пример
xyzabcbcdxyz
![Page 16: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/16.jpg)
Пример
xyzabcbcdxyz
![Page 17: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/17.jpg)
Пример
xyzabcbcdxyz
![Page 18: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/18.jpg)
Пример
xyzabcbcdxyz
![Page 19: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/19.jpg)
Пример
xyzabcbcdxyz
![Page 20: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/20.jpg)
Пример
xyzabcbcdxyz
Ура! Подходит!
![Page 21: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/21.jpg)
Ну теперь все мы знаем…
![Page 22: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/22.jpg)
Поиск по регекспам в PostgreSQL
• PostgreSQL поддерживает поиск по регулярным выражениям
• До версии 9.3 это был только последовательный поиск
![Page 23: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/23.jpg)
Обратные индексы на n-грамах
![Page 24: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/24.jpg)
N-грамы?
![Page 25: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/25.jpg)
N-грамы
• N-грамы – это подстрока длины n • Широко используются в различных нетривиальных задачах поиска по строкам
![Page 26: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/26.jpg)
Обратные индексы на n-грамах
• Обратный индекс на n-граммах содержит соответствие между n-граммой и всеми строками, где она встречается.
• Модуль PostgreSQL pg_trgm содержит реализацию такого индекса для n = 3.
![Page 27: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/27.jpg)
pg_trgm
' e': {1,2} 'egu': {1,3} 'pre': {1,2}
' r': {1,3} 'er ': {3} 'reg': {1,3}
' s': {2,3} 'ess': {1,2} 'res': {1,2}
' ex': {1,2} 'exp': {1,2} 'sio': {1}
' re': {1,3} 'gul': {1,3} 'siv': {2}
' sp': {2,3} 'ion': {1} 'spe': {2,3}
'ach': {2} 'ive': {2} 'ssi': {1,2}
'ake': {3} 'ker': {3} 'ula': {1,3}
'ar ': {1,3} 'lar': {1,3} 've ': {2}
'ch ': {2} 'ns ': {1} 'xpr': {1,2}
'eac': {2} 'ons': {1}
'eak': {3} 'pea': {2,3}
1. "regular expressions", 2. "expressive speach", 3. "regular speaker"
=>
![Page 28: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/28.jpg)
Частоты N-грам
DBLP: 2.5M заголовков статей • “the” - 360K • “zzz” – 1 глава "Zzzzzzzzzzzzzzzzzzzzzzzzzz" книги "Formal
Specification and Development in Z and B" от David Everett
![Page 29: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/29.jpg)
Не все N-грамы одинаково полезны
![Page 30: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/30.jpg)
V-грамы и мультиграмы
• У каждой n-грамы – своё индивидуальное n
• Выше эффективность!
![Page 31: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/31.jpg)
V-грамы и мультиграмы
Проблемы: • Трудно поддерживать актуальность
• …
![Page 32: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/32.jpg)
Патентные тролли!
![Page 33: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/33.jpg)
Как использовать индекс для поиска по регэкспам?
![Page 34: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/34.jpg)
Общая идея
/[ab]cde/ => (acd OR bcd) AND cde
![Page 35: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/35.jpg)
/[ab]cde/ => (acd OR bcd) AND cde
Как это сделать в общем случае?
![Page 36: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/36.jpg)
Существующие подходы к извлечению n-грам
из регулярных выражений
![Page 37: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/37.jpg)
Научная работа
Junghoo Ch and Sridhar Rajagopalan, A fast regular expression indexing engine, Proceedings 18th International Conference on Data Engineering, 2002 Всё ещё широко цитируется, как актуальное решение в данной области.
![Page 38: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/38.jpg)
Метод FREE
• Извлечь дерево непрерывных участков строки из регэкспа.
• Преобразование этих непрерывных кусков в мультиграмы (n-грамы с изменяемым n)
• Использовать инвертированный индекс на мультиграмах для выполнения запроса
![Page 39: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/39.jpg)
Метод FREE: пример
Дерево для /(abcd|efgh)(ijklm|x*)/
![Page 40: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/40.jpg)
Метод FREE: пример
Заменить узлы “*” на NULL
![Page 41: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/41.jpg)
Метод FREE: пример
NULL “съедает” родительский узел OR
![Page 42: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/42.jpg)
Метод FREE: пример
Узел AND “съедает” дочерний NULL
![Page 43: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/43.jpg)
Метод FREE: пример
Уберём вырожденный AND
![Page 44: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/44.jpg)
Метод FREE: пример
Разобьем непрерывные куски строк на n-грамы
![Page 45: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/45.jpg)
Google code search
![Page 46: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/46.jpg)
Google code search
• Запустился в 2006.
• Скорее всего использовал что-то получше, чем предыдущий метод.
• Но мы не знаем что... :(
![Page 47: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/47.jpg)
Мы не знали что, пока..
• Google code search закрылся в 2011 :(
• http://swtch.com/~rsc/regexp/regexp4.html
• Более 5 лет интриги!
![Page 48: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/48.jpg)
Метод google code search
• 5 характеристик: emptyable, exact, prefix, suffix, match.
• Характеристики рекурсивно объединяются
• Инвертированный индекс на триграммах
![Page 49: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/49.jpg)
Метод google code search
Исходное выражение: /a(bc)+d/
a: {exact: a}
bc: {exact: bc}
d: {exact: d}
(bc)+: {prefix:bc, suffix: bc}
a(bc)+: {prefix:abc, suffix:bc}
a(bc)+d: {prefix:abc, suffix:bcd}
![Page 50: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/50.jpg)
Метод google code search
/a(bc)+d/
{prefix:abc, suffix:bcd}
abc AND bcd
![Page 51: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/51.jpg)
Предлагаемый метод
![Page 52: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/52.jpg)
Предлагаемый метод
• Анализировать не само регулярное выражение, а соответствующий ему лингвистический автомат.
• Преобразовывать лингвистический автомат в контактную схему на триграммах.
• Использовать обратный индекс модуля pg_trgm вместе с полученной контактной схемой.
![Page 53: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/53.jpg)
Пример преобразования
/a(b+|c+)d/
![Page 54: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/54.jpg)
Пример преобразования
![Page 55: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/55.jpg)
Пример преобразования
![Page 56: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/56.jpg)
Пример преобразования
![Page 57: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/57.jpg)
Пример преобразования
![Page 58: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/58.jpg)
Пример преобразования
![Page 59: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/59.jpg)
Пример преобразования
![Page 60: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/60.jpg)
Пример преобразования
![Page 61: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/61.jpg)
Пример преобразования
![Page 62: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/62.jpg)
Пример преобразования
![Page 63: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/63.jpg)
Пример преобразования
![Page 64: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/64.jpg)
Пример преобразования
![Page 65: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/65.jpg)
Пример преобразования
![Page 66: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/66.jpg)
Пример преобразования
![Page 67: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/67.jpg)
Пример преобразования
![Page 68: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/68.jpg)
Пример преобразования
![Page 69: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/69.jpg)
Пример преобразования
![Page 70: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/70.jpg)
Пример преобразования
![Page 71: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/71.jpg)
Пример преобразования
Результат можно упростить
![Page 72: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/72.jpg)
Сравнение на примерах
Regex: /(abc|cba)def/
FREE: (abc OR cba) AND def
GSC:
def AND ((abc AND bcd AND cde) OR (ade AND bad AND cba))
Предложенный метод:
(abc AND bcd AND cde AND def) OR (ade AND bad AND cba AND def)
![Page 73: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/73.jpg)
Сравнение на примерах
Regex: /abc+de/
FREE: nothing
GSC: abc AND cde
Предложенный метод :
(abc AND cde AND bcd) OR
(abc AND cde AND bcc AND ccd)
![Page 74: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/74.jpg)
Сравнение на примерах
Regex: /(abc*)+de/
FREE: nothing
GSC: nothing
Предложенный метод :
(abd AND bde) OR
(abc AND bcd AND cde) OR
(abc AND bcc AND ccd AND cde)
![Page 75: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/75.jpg)
Сравнение на примерах
Regex: /ab(cd)*ef/
FREE: nothing
GSC: nothing
Предложенный метод :
(abe AND bef) OR
(abc AND bde AND cde AND def)
![Page 76: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/76.jpg)
Проблемы
• Может получиться большой граф
- Есть graceful degradation.
• Использование триграм вместо v-грам (мультиграм)
- Смягчается с помощью GIN fast scan в PostgreSQL 9.4
![Page 77: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/77.jpg)
Тесты производительности
GIN fast scan рулит!
Regex Seq scan, мс 9.3, мс 9.4, мс
/database.*(sql|query)/ 5045 187 67
/postgres(ql)?/ 4573 75 4,3
/plan+er/ 3810 655 37
/(nucl|anino).*acid/ 4327 560 16
/[aei](bc)+a/ 2195 639 1,3
2.5 M заголовков статей DBLP средней длины 47
![Page 78: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/78.jpg)
Текущее состояние
Нужно:
• PostgreSQL 9.3+
• pg_trgm contrib
![Page 79: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/79.jpg)
Было опущено
• Детерминированные vs недетерминированные автоматы
• Группировка символов в цвета
• Начало и конец строки
![Page 80: PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков](https://reader034.fdocuments.net/reader034/viewer/2022052600/557f3527d8b42aba678b476a/html5/thumbnails/80.jpg)
Спасибо за внимание!