Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Лекция № 15. Поиск и индексация

Содержание

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name     ON { table | view } ( column [ ASC | DESC ] [ ,...n ] ) [ WITH < index_option > [
Полнотекстовый поиск и индексы.(Full-Text Search) CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name unique – значение индексируемой группы должно быть уникальноclustered – данные упорядочиваются физически Средства SQL для проверки соответствия текста заданному шаблонуLIKE – возвращает true, если Пример: LikeUSE pubs GO CREATE PROCEDURE find_books2 @au_lname varchar(20) AS SELECT t.title_id, Пример: PATINDEXUSE Northwind GO SELECT CategoryID, PATINDEX('%candies%', Description)AS POSITION FROM Categories WHERE Пример: CHARINDEXUSE pubsSELECT CHARINDEX('wonderful', notes)FROM titlesWHERE title_id = 'TC3218'Результат- позиция подстроки 'wonderful‘ Оба эти метода ограничены образцомFull-Text Search позволяет отслеживать как точное соответствие слову Поддерживаемые типы документовWord (*.doc)Excel (*.xls)PowerPoint (*.ppt)Text (*.txt)HTML (*.htm или *.html)	Кроме того многие Full-Text Search взаимодействует с MS Search service, который способен индексировать слова, содержащиеся MSSearch serviceCatalog filesStored in OSPhysical SQLServer DatabaseЗапрос, содержащийFull-Text поискSQL ServerFull-text часть запросаНомера найденных колонокQuery output Для того, чтобы Full-Text Search начал работать необходимо:Включить поддержку Full-Text для базыСоздать Включение поддержки Full-Text для базы EXEC sp_fulltext_database [@action =] ‘{enable|disable}’USE NorthwindEXEC sp_fulltext_database @action = ‘Enable’ Создание Full-Text Catalog 	Для управления Full-Text каталогом используется процедура sp_fulltext_catalog	EXEC sp_fulltext_catalog [@ftcat Включение поддержки Full-Text Search для таблицEXEC sp_fulltext_table [@tabname =] ‘[.]’, [@action=]‘{create|drop|activate|deactivate|start_change_tracking|stop_change_tracking|start_background_update_index|stop_background_update_index|update_index|start_full|start_incremental|stop}’[,[@ftcat = Добавление колонки в Full-Text индексsp_fulltext_column [@tabname =] ‘[.]’,[@colname =] ‘’ ,[@action =] После всех этих действий необходимо запустить заполнение (population) индексаEXEC sp_fulltext_table @tabname = ‘Employees’,@action = ‘start_full’, Full-Text Query SyntaxСуществует 2 условных выражения:CONTAINS – строгое соответствие шаблонуFREETEXT – нестрогое CONTAINSCONTAINS ({|*} , ‘’)SELECT EmployeeID, LastName, FirstNameFROM EmployeesWHERE CONTAINS(*, ‘Course’) FREETEXTFREETEXT({|*} , ‘’)SELECT EmployeeID, LastName, FirstNameFROM EmployeesWHERE FREETEXT(*, ‘Course’) CONTAINSTABLECONTAINSTABLE (, {|*} , ‘’ [, ])SELECT *FROM CONTAINSTABLE(Employees, *, ‘Course’)Возвращает таблицу SELECT Rank, EmployeeID, LastName, FirstName, NotesFROM CONTAINSTABLE(Employees, *, ‘Course’) AS ctJOIN Employees SELECT Rank, EmployeeID, LastName, FirstName, NotesFROM FREETEXTTABLE(Employees, *, ‘Course’) AS ctJOIN Employees Использование фраз в шаблонахSELECT EmployeeID, LastName, FirstName, NotesFROM EmployeesWHERE CONTAINS(*, ‘ ”University SELECT EmployeeID, LastName, FirstName, NotesFROM EmployeesWHERE FREETEXT(*, ‘ ”University of California” ’)Этот Использование NEARNEAR – между словами шаблона имеется не более 8-10 других слов:SELECT Пример: NEARUSE Northwind GO SELECT FT_TBL.Description, FT_TBL.CategoryName, KEY_TBL.RANK FROM Categories AS FT_TBL Использование префиксовSELECT LastName, FirstName, NotesFROM EmployeesWHERE CONTAINS(*, ‘ ”grad*” ’)Будет искать все Задание весов для частей шаблонаSELECT Rank, EmployeeID, LastName, FirstName, NotesFROM CONTAINSTABLE(Employees, Notes, Поиск словоформ с использованием CONTAINSПо умолчанию CONTAINS ищет точное соответствие шаблонуSELECT LastName,
Слайды презентации

Слайд 2 CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name

] INDEX index_name     ON { table | view }

( column [ ASC | DESC ] [ ,...n ] ) [ WITH < index_option > [ ,...n] ] [ ON filegroup ]
< index_option > :: =     { PAD_INDEX |         FILLFACTOR = fillfactor |         IGNORE_DUP_KEY |         DROP_EXISTING |     STATISTICS_NORECOMPUTE |     SORT_IN_TEMPDB  }






Слайд 3 unique – значение индексируемой группы должно быть уникально
clustered

unique – значение индексируемой группы должно быть уникальноclustered – данные упорядочиваются

– данные упорядочиваются физически (по умолчанию это используется для

всех primary keys)
nonclustered – используется вектор индексов, данные физически не упорядочиваются

CREATE TABLE t1 (a int, b int, c AS a/b)
GO
CREATE UNIQUE CLUSTERED INDEX Idx1 ON t1.c
GO
INSERT INTO t1 VALUES ('1', '0')
GO






Слайд 4 Средства SQL для проверки соответствия текста заданному шаблону
LIKE

Средства SQL для проверки соответствия текста заданному шаблонуLIKE – возвращает true,

– возвращает true, если строковое поле содержит шаблон
match_expression [

NOT ] LIKE pattern [ ESCAPE escape_character ]
PATINDEX или CHARINDEX – возвращает позицию заданной подстроки в строке:
PATINDEX ( '%pattern%' , expression )
CHARINDEX ( expression1 , expression2 [ , start_location ] )






Слайд 5 Пример: Like
USE pubs
GO
CREATE PROCEDURE find_books2 @au_lname

Пример: LikeUSE pubs GO CREATE PROCEDURE find_books2 @au_lname varchar(20) AS SELECT

varchar(20)
AS SELECT t.title_id, t.title
FROM authors a, titleauthor

ta, titles t
WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id AND a.au_lname LIKE @au_lname + '%'
EXEC find_books2 'ring'
Результат работы процедуры:
title_ id title -------- ---------------------------------------------------------------
MC3021 The Gourmet Microwave
PS2091 Is Anger the Enemy?
PS2091 Is Anger the Enemy?
PS2106 Life Without Fear (4 row(s) affected)






Слайд 6 Пример: PATINDEX
USE Northwind
GO
SELECT CategoryID, PATINDEX('%candies%', Description)AS

Пример: PATINDEXUSE Northwind GO SELECT CategoryID, PATINDEX('%candies%', Description)AS POSITION FROM Categories

POSITION FROM Categories WHERE PATINDEX('%candies%', Description) 0
Результатом

будут строки, где в поле Description будет найдена подстрока 'candies' с произвольным началом и концом






Слайд 7 Пример: CHARINDEX
USE pubs
SELECT CHARINDEX('wonderful', notes)
FROM titles
WHERE title_id =

Пример: CHARINDEXUSE pubsSELECT CHARINDEX('wonderful', notes)FROM titlesWHERE title_id = 'TC3218'Результат- позиция подстроки

'TC3218'
Результат- позиция подстроки 'wonderful‘ в поле notes таблицы titles

:
----------------
46
(1 row(s) affected)






Слайд 8 Оба эти метода ограничены образцом
Full-Text Search позволяет отслеживать

Оба эти метода ограничены образцомFull-Text Search позволяет отслеживать как точное соответствие

как точное соответствие слову в шаблоне, так и словоформы

(Например шаблон drink, а найти нужно не только drink, но и drunk)
Помимо поиска по plain text поддерживается поиск по документам перечисленных ниже типов (содержимое этих документов должно содержаться в image поле)






Слайд 9 Поддерживаемые типы документов
Word (*.doc)
Excel (*.xls)
PowerPoint (*.ppt)
Text (*.txt)
HTML (*.htm

Поддерживаемые типы документовWord (*.doc)Excel (*.xls)PowerPoint (*.ppt)Text (*.txt)HTML (*.htm или *.html)	Кроме того

или *.html)
Кроме того многие производители создают собственные фильтры для

поддержки полнотекстового поиска по своим документам (например Adobe для Adobe Acrobat)






Слайд 10 Full-Text Search взаимодействует с MS Search service, который

Full-Text Search взаимодействует с MS Search service, который способен индексировать слова,

способен индексировать слова, содержащиеся в обработанных файлах для организации

в дальнейшем поиска по этим словам (это используется например в Microsoft Index Server)
Для таблиц MS SQL сервера строятся полнотекстовые индексы, которые хранятся отдельно от базы данных (используется file-based storage архитектура)






Слайд 11 MSSearch
service
Catalog files
Stored in OS
Physical SQL
Server Database
Запрос, содержащий
Full-Text

MSSearch serviceCatalog filesStored in OSPhysical SQLServer DatabaseЗапрос, содержащийFull-Text поискSQL ServerFull-text часть запросаНомера найденных колонокQuery output

поиск

SQL Server
Full-text часть запроса
Номера найденных колонок

Query output





Слайд 12 Для того, чтобы Full-Text Search начал работать необходимо:
Включить

Для того, чтобы Full-Text Search начал работать необходимо:Включить поддержку Full-Text для

поддержку Full-Text для базы
Создать Full-Text Catalog
Создать Full-Text Index
Заполнить Full-Text

Index. В процессе заполнения (population), добавленные в Full-Text Index текстовые поля таблиц просматриваются и составляется «словарь» слов, содержащихся в каждом поле каждой записи, который в дальнейшем используется для поиска






Слайд 13 Включение поддержки Full-Text для базы
EXEC sp_fulltext_database [@action =]

Включение поддержки Full-Text для базы EXEC sp_fulltext_database [@action =] ‘{enable|disable}’USE NorthwindEXEC sp_fulltext_database @action = ‘Enable’

‘{enable|disable}’

USE Northwind
EXEC sp_fulltext_database @action = ‘Enable’





Слайд 14 Создание Full-Text Catalog
Для управления Full-Text каталогом используется процедура

Создание Full-Text Catalog 	Для управления Full-Text каталогом используется процедура sp_fulltext_catalog	EXEC sp_fulltext_catalog

sp_fulltext_catalog

EXEC sp_fulltext_catalog [@ftcat = ] ‘’,
[@action =]

‘{create|drop|start_incremental|start_full|stop|rebuild}’
[, [@path =] ‘’ ]

USE Northwind
EXEC sp_fulltext_catalog @ftcat = ‘NorthWindFullText’,
@action = ‘CREATE’






Слайд 15 Включение поддержки Full-Text Search для таблиц
EXEC sp_fulltext_table [@tabname

Включение поддержки Full-Text Search для таблицEXEC sp_fulltext_table [@tabname =] ‘[.]’, [@action=]‘{create|drop|activate|deactivate|start_change_tracking|stop_change_tracking|start_background_update_index|stop_background_update_index|update_index|start_full|start_incremental|stop}’[,[@ftcat

=] ‘[.]’, [@action=]
‘{create|drop|activate|deactivate|start_change_tracking
|stop_change_tracking|start_background_update_index
|stop_background_update_index|update_index|start_full
|start_incremental|stop}’
[,[@ftcat = ] ‘’, [@keyname =]

‘index name’]

USE Northwind
EXEC sp_fulltext_table @tabname = ‘Employees’,
@action = ‘create’,
@ftcat = ‘NorthwindFullText’,
@keyname = ‘PK_Employees’






Слайд 16 Добавление колонки в Full-Text индекс
sp_fulltext_column [@tabname =] ‘[.]’,
[@colname

Добавление колонки в Full-Text индексsp_fulltext_column [@tabname =] ‘[.]’,[@colname =] ‘’ ,[@action

=] ‘’ ,
[@action =] ‘{add|drop}’
[,[ @language =] ‘’]
[,

[@type_colname =] ‘’]

USE Northwind
EXEC sp_fulltext_column @tabname = ‘Employees’,
@colname = ‘Notes’
@action = ‘add’






Слайд 17 После всех этих действий необходимо
запустить заполнение (population)

После всех этих действий необходимо запустить заполнение (population) индексаEXEC sp_fulltext_table @tabname = ‘Employees’,@action = ‘start_full’,

индекса

EXEC sp_fulltext_table @tabname = ‘Employees’,
@action = ‘start_full’,






Слайд 18 Full-Text Query Syntax
Существует 2 условных выражения:
CONTAINS – строгое

Full-Text Query SyntaxСуществует 2 условных выражения:CONTAINS – строгое соответствие шаблонуFREETEXT –

соответствие шаблону
FREETEXT – нестрогое соответствие (словоформы)
и 2 эквивалентных выражения,

возвращающие таблицы:
CONTAINSTABLE
FREETEXTTABLE






Слайд 19 CONTAINS
CONTAINS ({|*} , ‘’)

SELECT EmployeeID, LastName, FirstName
FROM

CONTAINSCONTAINS ({|*} , ‘’)SELECT EmployeeID, LastName, FirstNameFROM EmployeesWHERE CONTAINS(*, ‘Course’)

Employees
WHERE CONTAINS(*, ‘Course’)





Слайд 20 FREETEXT
FREETEXT({|*} , ‘’)

SELECT EmployeeID, LastName, FirstName
FROM Employees
WHERE

FREETEXTFREETEXT({|*} , ‘’)SELECT EmployeeID, LastName, FirstNameFROM EmployeesWHERE FREETEXT(*, ‘Course’)

FREETEXT(*, ‘Course’)





Слайд 21 CONTAINSTABLE
CONTAINSTABLE (, {|*} , ‘’ [,

CONTAINSTABLECONTAINSTABLE (, {|*} , ‘’ [, ])SELECT *FROM CONTAINSTABLE(Employees, *, ‘Course’)Возвращает

])

SELECT *
FROM CONTAINSTABLE(Employees, *, ‘Course’)

Возвращает таблицу с 2мя

полями – key и rank.
Key – ключевое поле исходной таблицы (Employees), соответствующее найденным записям
Rank – уровень соответствия найденной записи заданному шаблону (число от 0 до 1000)






Слайд 22 SELECT Rank, EmployeeID, LastName, FirstName, Notes
FROM CONTAINSTABLE(Employees, *,

SELECT Rank, EmployeeID, LastName, FirstName, NotesFROM CONTAINSTABLE(Employees, *, ‘Course’) AS ctJOIN

‘Course’) AS ct
JOIN Employees AS e
ON ct.[KEY] =

e.EmployeeID






Слайд 23 SELECT Rank, EmployeeID, LastName, FirstName, Notes
FROM FREETEXTTABLE(Employees, *,

SELECT Rank, EmployeeID, LastName, FirstName, NotesFROM FREETEXTTABLE(Employees, *, ‘Course’) AS ctJOIN

‘Course’) AS ct
JOIN Employees AS e
ON ct.[KEY] =

e.EmployeeID






Слайд 24 Использование фраз в шаблонах
SELECT EmployeeID, LastName, FirstName, Notes
FROM

Использование фраз в шаблонахSELECT EmployeeID, LastName, FirstName, NotesFROM EmployeesWHERE CONTAINS(*, ‘

Employees
WHERE CONTAINS(*, ‘ ”University of California” ’)
Этот запрос найдет

все записи, в поле Notes которых есть слова ‘University’, ‘of’ и ‘California’
Можно использовать and, or и not






Слайд 25 SELECT EmployeeID, LastName, FirstName, Notes
FROM Employees
WHERE FREETEXT(*, ‘

SELECT EmployeeID, LastName, FirstName, NotesFROM EmployeesWHERE FREETEXT(*, ‘ ”University of California”

”University of California” ’)
Этот запрос найдет все записи, в

поле Notes которых есть слова ‘University’, ‘of’ ИЛИ ‘California’. ‘Of’ будет проигнорировано как ‘noise word’. Список таких слов содержится в обычном текстовом файле






Слайд 26 Использование NEAR
NEAR – между словами шаблона имеется не

Использование NEARNEAR – между словами шаблона имеется не более 8-10 других

более 8-10 других слов:
SELECT Rank, EmployeeID, LastName, FirstName, Notes
FROM

CONTAINSTABLE(Employees, *, ‘completed near sales’) AS ct
JOIN Employees AS e
ON ct.[KEY] = e.EmployeeID







Слайд 27 Пример: NEAR
USE Northwind
GO
SELECT FT_TBL.Description, FT_TBL.CategoryName, KEY_TBL.RANK

FROM Categories AS FT_TBL
INNER JOIN CONTAINSTABLE (Categories, Description,

'("sweet and savory" NEAR sauces) OR ("sweet and savory" NEAR candies)' ) AS KEY_TBL ON FT_TBL.CategoryID = KEY_TBL.[KEY] WHERE KEY_TBL.RANK > 2 AND FT_TBL.CategoryName <> 'Seafood'
ORDER BY KEY_TBL.RANK DESC

Слайд 28 Использование префиксов
SELECT LastName, FirstName, Notes
FROM Employees
WHERE CONTAINS(*, ‘

Использование префиксовSELECT LastName, FirstName, NotesFROM EmployeesWHERE CONTAINS(*, ‘ ”grad*” ’)Будет искать

”grad*” ’)
Будет искать все слова начинающиеся с grad
CONTAINS(*, ‘grad*’)

будет искать подстроку grad* (важно ставить кавычки)






Слайд 29 Задание весов для частей шаблона
SELECT Rank, EmployeeID, LastName,

Задание весов для частей шаблонаSELECT Rank, EmployeeID, LastName, FirstName, NotesFROM CONTAINSTABLE(Employees,

FirstName, Notes
FROM CONTAINSTABLE(Employees, Notes,
‘ISABOUT (BA WEIGHT (.2), BS

WEIGHT (.4), MA WEIGHT (.8))’) AS ct
JOIN Employees AS e
ON ct.[KEY] = e.EmployeeID
ORDER BY Rank DESC
То есть найти ‘MA’ в 2 раза важнее, чем ‘BS’, а ‘BS’ в 2 раза важнее, чем ‘BA’. Записи, в которых содержится ‘MA’ будут иметь более высокий RANK. Сначала будут выведены, магистры (MA), затем бакалавры (BS), затем бакалавры искусств (BA) – производится ранжирование по уровню образования.






  • Имя файла: lektsiya-n-15-poisk-i-indeksatsiya.pptx
  • Количество просмотров: 102
  • Количество скачиваний: 0