T-SQL 2012: FREETEXT и CONTAINS - полнотекстовый поиск
SELECT lcid, name
FROM sys.fulltext_languages
ORDER BY name;
CREATE TABLE tsql.dbo.Documents
(
id INT IDENTITY(1,1) NOT NULL,
title NVARCHAR(50) NOT NULL,
docexcerpt NVARCHAR(100) NOT NULL
CONSTRAINT PK_id
PRIMARY KEY CLUSTERED(id)
);
INSERT INTO tsql.dbo.Documents
(title, docexcerpt)
SELECT N'Title English',
N'English Text';
INSERT INTO tsql.dbo.Documents
(title, docexcerpt)
SELECT N'Русский заголовок',
N'Русский текст';
CREATE FULLTEXT CATALOG search_catalog;
CREATE FULLTEXT INDEX ON tsql.dbo.Documents
(
title
Language 1033,
docexcerpt
Language 1049
)
KEY INDEX PK_id
ON search_catalog;
--Использование предиката CONTAINS (или CONTAINSTABLE) для нахождения точного или неточного (менее точного) совпадения
--с отдельными словами и фразами, сходства слов на определенном расстоянии друг от друга или взвешенных совпадений.
--При использовании предиката CONTAINS необходимо указать по крайней мере одно условие поиска,
--в котором задается искомый текст и условия, определяющие совпадения.
--Использование предикатов FREETEXT (или FREETEXTTABLE) для поиска совпадения по смыслу,
--а не буквального совпадения задаваемых слов, фраз или предложений (текст в свободной форме).
--Соответствие регистрируется, если в полнотекстовом индексе указанного столбца найден любой из терминов в любой форме.
SELECT docexcerpt
FROM tsql.dbo.Documents
WHERE CONTAINS(docexcerpt, N'текст');
SELECT title, docexcerpt
FROM tsql.dbo.Documents
WHERE CONTAINS(docexcerpt, N'текст OR English');
SELECT docexcerpt
FROM tsql.dbo.Documents
WHERE CONTAINS(docexcerpt, N'Text AND NOT текст');
SELECT docexcerpt
FROM tsql.dbo.Documents
WHERE CONTAINS(docexcerpt, N'"En*"');
SELECT docexcerpt
FROM tsql.dbo.Documents
WHERE FREETEXT(docexcerpt, N'English language');
SELECT docexcerpt
FROM tsql.dbo.Documents
WHERE FREETEXT(docexcerpt, N'текст документа');
Комментарии пользователей
Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!