![Page 1: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/1.jpg)
Полнотекстовый Поиск
Построение поисковой системы методами SQL Server
![Page 2: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/2.jpg)
Почему свой поиск
§ Транзакционность § Скорость нечеткого поиска § Дополнительные типы поиска § Простота поддержки и внесения модификаций
2 |
![Page 3: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/3.jpg)
Основные принципы (1)
§ Поисковый индекс § Сканнер документов § Парсер запросов § Сама поисковая машина
3 |
![Page 4: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/4.jpg)
Основные принципы (2)
4 |
![Page 5: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/5.jpg)
Построение индекса
Прямой индекс Обратный индекс docID termID 1 1 1 2 2 3 . .
doc1 doc2 doc3 term1 1 0 1 term2 1 0 0 term3 0 1 1 term4 0 0 1
ID value 1 term1 2 term2 3 term3
(term1 and term2) = 101 & 100 = 100 = doc1
5 |
![Page 6: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/6.jpg)
Расширение выборки
§ Стемминг § Учет синонимов § Распознавание числительных § Все, что подскажет фантазия J
6 |
![Page 7: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/7.jpg)
Поиск по индексу
§ Обработка запроса § Очистка от мусора § Токенизация § Построение дерева
§ Опрос индекса § Сведение результатов
7 |
![Page 8: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/8.jpg)
Поиск по индексу (2)
§ apple and juice
§ apple juice or orange juice
8 |
![Page 9: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/9.jpg)
Варианты выполнения запросов
§ Классический § Получаем синтаксическое дерево § Каждый лист дерева – запрос к базе § Каждый узел – сведение результатов
§ Единый запрос § Как и в классическом – дерево § Строим единый запрос (JOIN, UNION,
INTERSECT) § Получаем уже готовые результаты
9 |
![Page 10: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/10.jpg)
Нечеткий поиск
§ Отличия от булевого поиска § Основные характеристики
§ Нечеткая логика § Мера похожести слов
10 |
![Page 11: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/11.jpg)
Алгоритмы сравнения
§ Расстояние Хемминга § Расстояние Левенштайна § Расстояние Демерау-Левенштайна § Фонетический поиск § Метод N-грамм
11 |
![Page 12: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/12.jpg)
Расстояния
§ Хемминга § Несовпадения символов по позициям § (Apple)(Juice) = 4
§ Левенштайна
12 |
![Page 13: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/13.jpg)
Расстояние Левенштайна
a p p l e 0 1 2 3 4 5
A 1 0 1 2 3 4 p 2 1 0 1 2 3 l 3 2 1 1 1 2 e 4 3 2 2 2 1
13 |
Пример подсчета расстояния
Демерау-Левенштайна учитывает перестановку символов вдобавок к удалению/вставке
![Page 14: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/14.jpg)
Эффективность Левенштайна
§ Общая оценка временной сложности 𝑂(𝑚𝑛)
§ При расширении выборки 𝑂( (𝑚|𝐿|)↑𝑑 log 𝑛 )
14 |
![Page 15: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/15.jpg)
Фонетический поиск
§ SOUNDEX § Основан на «звучании» слова § Устаревший и сегодня неиспользуемый
§ Metaphone and Double Metaphone § Основаны на согласных § Различия в том, что Double возвращает основной и дополнительный коды строки
§ Google and Googol = KKL, KKL
15 |
![Page 16: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский](https://reader034.vdocument.in/reader034/viewer/2022042602/55852927d8b42a30308b46c6/html5/thumbnails/16.jpg)
Метод N-грамм
§ Наиболее используемый § Основан на теории общих подстрок § Разбиение на подстроки длинной N
§ N = 3 обычно § Apple = app, ppl, ple
§ Слабость при ошибках в коротких словах § apple = app ppl ple § apble = apb pbl ble (0 совпадений)
16 |