webcamp: developer day: sql server full-text search - это не для меня, или...

16
Полнотекстовый Поиск Построение поисковой системы методами SQL Server

Upload: geekslab

Post on 20-Jun-2015

96 views

Category:

Documents


0 download

DESCRIPTION

SQL Server Full-Text Search - это не для меня, или построение своей системы Олег Ракитский Что находится под капотом у поисковых систем? Почему мы решили делать что-то свое, а не просто и быстро заюзать готовые решения? Четкие и нечеткие модели поиска. Как это у нас все работает?..

TRANSCRIPT

Page 1: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Полнотекстовый Поиск

Построение поисковой системы методами SQL Server

Page 2: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Почему свой поиск

§  Транзакционность §  Скорость нечеткого поиска §  Дополнительные типы поиска §  Простота поддержки и внесения модификаций

2 |

Page 3: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Основные принципы (1)

§  Поисковый индекс §  Сканнер документов §  Парсер запросов §  Сама поисковая машина

3 |

Page 4: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Основные принципы (2)

4 |

Page 5: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Построение индекса

Прямой индекс Обратный индекс 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 - это не для меня, или построение своей системы - Олег Ракитский

Расширение выборки

§  Стемминг §  Учет синонимов §  Распознавание числительных §  Все, что подскажет фантазия J

6 |

Page 7: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Поиск по индексу

§  Обработка запроса §  Очистка от мусора §  Токенизация §  Построение дерева

§  Опрос индекса §  Сведение результатов

7 |

Page 8: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Поиск по индексу (2)

§  apple and juice

§  apple juice or orange juice

8 |

Page 9: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Варианты выполнения запросов

§  Классический §  Получаем синтаксическое дерево §  Каждый лист дерева – запрос к базе §  Каждый узел – сведение результатов

§  Единый запрос §  Как и в классическом – дерево §  Строим единый запрос (JOIN, UNION,

INTERSECT) §  Получаем уже готовые результаты

9 |

Page 10: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Нечеткий поиск

§  Отличия от булевого поиска §  Основные характеристики

§  Нечеткая логика §  Мера похожести слов

10 |

Page 11: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Алгоритмы сравнения

§  Расстояние Хемминга §  Расстояние Левенштайна §  Расстояние Демерау-Левенштайна §  Фонетический поиск §  Метод N-грамм

11 |

Page 12: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Расстояния

§  Хемминга §  Несовпадения символов по позициям §  (Apple)(Juice) = 4

§  Левенштайна

12 |

Page 13: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Расстояние Левенштайна

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 - это не для меня, или построение своей системы - Олег Ракитский

Эффективность Левенштайна

§  Общая оценка временной сложности 𝑂(𝑚𝑛)

§  При расширении выборки 𝑂( (𝑚|𝐿|)↑𝑑 log 𝑛 )

14 |

Page 15: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Фонетический поиск

§  SOUNDEX §  Основан на «звучании» слова §  Устаревший и сегодня неиспользуемый

§  Metaphone and Double Metaphone §  Основаны на согласных §  Различия в том, что Double возвращает основной и дополнительный коды строки

§  Google and Googol = KKL, KKL

15 |

Page 16: WebCamp: Developer Day: SQL Server Full-Text Search - это не для меня, или построение своей системы - Олег Ракитский

Метод N-грамм

§  Наиболее используемый §  Основан на теории общих подстрок §  Разбиение на подстроки длинной N

§  N = 3 обычно §  Apple = app, ppl, ple

§  Слабость при ошибках в коротких словах §  apple = app ppl ple §  apble = apb pbl ble (0 совпадений)

16 |