Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 FreeText SQLServer 2008 не срабатывает  [new]
Вячеславовна
Member

Откуда:
Сообщений: 58
Помогите, пожалуйста! Я только сегодня начала работать с Full Text Search

Есть таблица Developers, я пытаюсь сделать по ней полнотекстовый поиск.

Запрос
Select * FROM dbo.Developers
WHERE FREETEXT(ShortDescription, 'торговля');
возвращает 0 записей, что неправильно, потому что

Select * FROM dbo.Developers
WHERE ShortDescription like '%торговля%'
возвращает одну запись.

Поля таблицы Developers:
[DeveloperId] [uniqueidentifier] NOT NULL,
[DeveloperName] [varchar](50) NOT NULL,
[ShortDescription] [varchar](max) NULL,
[FullDescription] [varbinary](max) NULL,
[DescriptionFileExtension] [nchar](8) NULL,

В полнотекcтовый индекс входит три столбца: DeveloperName, ShortDescription, FullDescription. Поле для расширения файла для varbinary - DescriptionFileExtension.
Язык для столбцов в индексе указан русский, дефолтный язык для FTS - 1049.
Порядок сортировки для них, Cyrillic_General_CI_AS
Полнотекстовый индекс перестраивали.

Используется SQLServer 2008 R2 Express Edition c доп.службами, русская версия, на Windows 7, если это важно ))

Куда копать, на что еще смотреть?
Всем откликнувшимся - плюс 100 к светлой карме!
17 апр 13, 20:47    [14195136]     Ответить | Цитировать Сообщить модератору
 Re: FreeText SQLServer 2008 не срабатывает  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Попробуйте использовать предикат CONTAINS.
17 апр 13, 21:01    [14195161]     Ответить | Цитировать Сообщить модератору
 Re: FreeText SQLServer 2008 не срабатывает  [new]
Вячеславовна
Member

Откуда:
Сообщений: 58
pkarklin,
Не помогло, увы. Результат не изменился. Тем временем я сделала другую таблицу, без поля varbinary, там FTS более-менее работает.
17 апр 13, 21:54    [14195351]     Ответить | Цитировать Сообщить модератору
 Re: FreeText SQLServer 2008 не срабатывает  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Вячеславовна,

Было бы интересно взглянуть на DDL таблицы, FTS индекса на нее, образцы данных, запрос и его результат...
17 апр 13, 22:05    [14195401]     Ответить | Цитировать Сообщить модератору
 Re: FreeText SQLServer 2008 не срабатывает  [new]
Вячеславовна
Member

Откуда:
Сообщений: 58
pkarklin, проблема у меня сосредоточена в varbinary(max). Сделала новую таблицу для экспериментов. Делала я все "мышкой" в Managenment Studio. Вот скрипты для создания того же самого. Таблица:

CREATE TABLE [dbo].[AddFiles](
	[AddFileId] [uniqueidentifier] NOT NULL,
	[FileContent] [varbinary](max) NULL,
	[FileExtension] [varchar](8) NULL,
 CONSTRAINT [PK_AddFiles] PRIMARY KEY CLUSTERED 
(
	[AddFileId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE FULLTEXT INDEX ON [dbo].[AddFiles](
[FileContent] TYPE COLUMN [FileExtension] LANGUAGE [Russian])
KEY INDEX [PK_AddFiles]ON ([FTS_1], FILEGROUP [PRIMARY])
WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM)


Каталог FTS:
CREATE FULLTEXT CATALOG [FTS_1]WITH ACCENT_SENSITIVITY = OFF
AS DEFAULT
AUTHORIZATION [dbo]


По содержанию
Заполняла данные руками, через форму на Access Project, так что запросов на популяцию, увы, нет....
Первые два запроса записей не возвращают ничего, третий - одну запись
Select *
FROM dbo.AddFiles
WHERE FREETEXT(FileContent, 'акцептант');
GO

Select *
FROM dbo.AddFiles
WHERE CONTAINS (FileContent, 'акцептант');
GO

Select *
FROM dbo.AddFiles
WHERE FileContent like  '%акцептант%'
GO


Записи в таблице выглядят как-то так:
2F3143E1-00BA-44AA-9ABF-39257FC64891 0xFFFE151C2D00020000000900100014001D00FFFFFFFF446F6 .doc
0532B675-6DEB-4541-9B1E-64CDF3759D30 0xFFFE151C27000200000005000E0014001900FFFFFFFFCBE8F .xls
0BDB0CCC-D47B-4EAA-A286-B555512838F8 0xFFFE151C2D00020000000900100014001D00FFFFFFFF446F6 .doc
2A2B7CA8-6874-4B27-9ADF-B757F2C5117E 0xFFFE151C2D00020000000900100014001D00FFFFFFFF446F6 .doc
78AB65E0-7155-4539-87C0-F3C58B57EE4F 0xFFFE151C2D00020000000900100014001D00FFFFFFFF446F6 .doc

Байт 0xFFFE я добавляла потом, запросом:
update dbo.AddFiles set FileContent = 0xFFFE + FileConten
, исходя из этого совета:
http://connect.microsoft.com/SQLServer/feedback/details/124925/full-text-search-fails-on-unicode-text-stored-in-varbinary-max-or-image-columns

Добавление байта не помогло

Фильтры для .doc и .xls в базе есть, проверяла командой
EXEC sp_help_fulltext_system_components 'filter'


Думаю, у меня что-то с фильтрами
18 апр 13, 09:42    [14196503]     Ответить | Цитировать Сообщить модератору
 Re: FreeText SQLServer 2008 не срабатывает  [new]
Вячеславовна
Member

Откуда:
Сообщений: 58
Явно что-то с фильтрами, потому что если добавить в табличку файл .txt, то полнотекстовый поиск по содержимому Varbinary работает. Может быть, фильтры на .doc/.xls старые, и не очень хорошо работают с файлами, с которыми работали в Office 2010, в режиме совместимости. Между прочим, файлы, которые я запихивала в таблицу, имели расширение именно .doc/.xls, а не .docx/.xlsx
18 апр 13, 09:55    [14196579]     Ответить | Цитировать Сообщить модератору
 Re: FreeText SQLServer 2008 не срабатывает  [new]
f2f
Guest
Вячеславовна
Байт 0xFFFE я добавляла потом, запросом:
update dbo.AddFiles set FileContent = 0xFFFE + FileConten
, исходя из этого совета:
http://connect.microsoft.com/SQLServer/feedback/details/124925/full-text-search-fails-on-unicode-text-stored-in-varbinary-max-or-image-columns


Такое можно делать только с текстовыми файлами в utf8, а у вас .doc и .xls !
18 апр 13, 10:04    [14196630]     Ответить | Цитировать Сообщить модератору
 Re: FreeText SQLServer 2008 не срабатывает  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
На
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4263.0 (X64) 
Aug 23 2012 15:56:56
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

при хранении файлов в таблице в полем с типом imаge и FTS по нему с TypeColumn таких проблем не возникает.

В этом не может быть проблемы:

автор
Заполняла данные руками, через форму на Access Project, так что запросов на популяцию, увы, нет....


?

Не хотите попробовать заполнить по аналогии с:

CREATE TABLE myTable(FileName nvarchar(60), 
  FileType nvarchar(60), Document varbinary(max));
GO

INSERT INTO myTable(FileName, FileType, Document) 
   SELECT 'Doc1.doc' AS FileName, 
      '.doc' AS FileType, 
      * FROM OPENROWSET(BULK N'Doc1.doc', SINGLE_BLOB) AS Document
18 апр 13, 10:05    [14196643]     Ответить | Цитировать Сообщить модератору
 Re: FreeText SQLServer 2008 не срабатывает  [new]
Вячеславовна
Member

Откуда:
Сообщений: 58
pkarklin,
Попробовала вставить содержимое файла "по аналогии", FTS заработал. Огромное человеческое спасибо!
18 апр 13, 11:12    [14197076]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить