[MSSQL2008] Полнотекстовый поиск, словоформы
От: cadet354 Россия
Дата: 28.12.09 08:56
Оценка:
Доброго времени,
по какой-то причине FREETEXT не учитывает словоформы русского языка (с английским все нормально).
вот пример по аналогии с этим пример с simple-talk

IF OBJECT_ID (N'StormyWeatherRU', N'U') IS NOT NULL
DROP TABLE StormyWeatherRU
GO
CREATE TABLE StormyWeatherRU (
  StormID INT NOT NULL IDENTITY,
  StormHead NVARCHAR(50) NOT NULL,
  StormBody NVARCHAR(MAX) NOT NULL,
  CONSTRAINT [PK_StormyWeatherRU_StormID] PRIMARY KEY CLUSTERED (StormID ASC)
)
GO

INSERT INTO StormyWeatherRU (StormHead, StormBody)
VALUES('штормовая погода задерживает путешествие',
  'Штормовая погода делает прогулки на моторных лодках опасными')
INSERT INTO StormyWeatherRU (StormHead, StormBody)
VALUES('Штормовая погода в понедельник',
  'Штормовая погода делает поездку на моторных лодках опасной, особенно в понедельник')
INSERT INTO StormyWeatherRU (StormHead, StormBody)
VALUES('Штормовая погода в декабре',
  'В декабре может быть наибольшое количество штормов, это затрудняет путешествие даже на автомобиле')
INSERT INTO StormyWeatherRU (StormHead, StormBody)
VALUES('Шторм растет',
  'Штормовой ветер сильно вырос.')
INSERT INTO StormyWeatherRU (StormHead, StormBody)
VALUES('Шторм пересекает тихий океан',
  'шторм проходит над тихим океаном.')
GO
INSERT INTO StormyWeatherRU (StormHead, StormBody)
VALUES('Шторма лютуют',
  'Шторма лютуют над Тихим океаном, сильно мешают Федору Конюхову.')
GO

CREATE FULLTEXT CATALOG ftcStormyWeatherRU
GO

CREATE FULLTEXT INDEX ON StormyWeatherRU(StormHead Language 'RUSSIAN', StormBody Language 'RUSSIAN')
KEY INDEX PK_StormyWeatherRU_StormID
ON ftcStormyWeatherRU
WITH CHANGE_TRACKING AUTO
GO

SELECT StormID, StormHead, StormBody FROM StormyWeatherRU
WHERE FREETEXT(StormHead, 'шторм')
GO

SELECT StormID, StormHead, StormBody FROM StormyWeatherRU
WHERE CONTAINS(StormHead, 'FORMSOF(INFLECTIONAL, шторм)')

-- возвращают одно и тоже
-- 4    Шторм растет    Штормовой ветер сильно вырос.
-- 5    Шторм пересекает тихий океан    шторм проходит над тихим океаном.

вопрос почему не находит: 'Шторма лютуют' и многочисленные 'Штормовая...', что я не докрутил?
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
Re: [MSSQL2008] Полнотекстовый поиск, словоформы
От: cadet354 Россия
Дата: 29.12.09 08:34
Оценка:
в качестве up дополнение: в реестре для стриммера забита NaturalLanguage6.dll,
так и должно быть?
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
Re: [MSSQL2008] Полнотекстовый поиск, словоформы
От: cadet354 Россия
Дата: 08.01.10 12:31
Оценка:
up
Re: [MSSQL2008] Полнотекстовый поиск, словоформы
От: cadet354 Россия
Дата: 13.01.10 12:32
Оценка:
up
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
[MSSQL2008] Это не up, а следующий вопрос
От: cadet354 Россия
Дата: 01.02.10 08:55
Оценка:
Здравствуйте, cadet354, Вы писали:

C>вопрос почему не находит: 'Шторма лютуют' и многочисленные 'Штормовая...', что я не докрутил?

проблема обнаружилась в неудачно подобранном примере:
select *from sys.dm_fts_parser
(N'FORMSOF(FREETEXT, шторм)',1049, NULL,0)
-- возвращает только одну словоформу, само слово: шторм,
-- для сравнения:
select * from sys.dm_fts_parser
(N'FORMSOF(FREETEXT, лодка)',1049, NULL,0)
--возвращает 9 различных форм

можно ли как-то на это повлиять, на синонимы и стоп слова можно, а на словоформы?
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
Re: [MSSQL2008] Это не up, а следующий вопрос
От: Sinix  
Дата: 01.02.10 10:09
Оценка:
Здравствуйте, cadet354, Вы писали:

C>можно ли как-то на это повлиять, на синонимы и стоп слова можно, а на словоформы?

Только покупными стеммерами. искать по russian IStemmer (или просто stemmer)

Или искать по префиксу (штор*). Особенно удобно при горячем поиске (с автовыдачей результатов). Только не забудьте TOP добавить
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.