Используйте SQL Server FTS Stemmer - PullRequest
5 голосов
/ 11 ноября 2010

Есть ли какой-либо способ прямого доступа к основателю, используемому в опции FORMSOF() запроса CONTAINS Полнотекстового поиска, чтобы он возвращал основы / перегибы входного слова, а не только те производные, которые существуют в поискеcolumn.

Например, запрос

SELECT * FROM dbo.MyDB WHERE contains(CHAR_COL,'FORMSOF(INFLECTIONAL, prettier)')

возвращает стебель "pretty" и другие перегибы, такие как "prettiest", если они существуют в столбце CHAR_COL.Я хочу напрямую вызвать функцию FORMSOF (), не ссылаясь на столбец вообще.Есть шанс?

РЕДАКТИРОВАТЬ: Запрос, удовлетворяющий моим потребностям, в конечном итоге был

SELECT * FROM 
    (SELECT ROW_NUMBER() OVER (PARTITION BY group_ID ORDER BY GROUP_ID) ord, display_term
    from sys.dm_fts_parser('FORMSOF( FREETEXT, running) and FORMSOF(FREETEXT, jumping)', 1033, null, 1)) a
WHERE ord=1

Требуется членство в предопределенной роли сервера sysadmin и права доступа куказанный стоп-лист.

1 Ответ

3 голосов
/ 11 ноября 2010

Нет. Ты не сможешь это сделать. Вы не можете получить доступ к Stemermer напрямую.

Вы можете понять, как это работает, изучив исходный код Solr . Но это может (и я думаю, будет) отличаться от того, что реализовано в MS SQL FT.

ОБНОВЛЕНИЕ: Оказывается, что в SQL Server 2008 R2 вы можете сделать что-то очень близкое к тому, что вы хотите. Был добавлен специальный табличный UDF:

 sys.dm_fts_parser('query_string', lcid, stoplist_id, accent_sensitivity)

позволяет получить результат токенизации (т. Е. Результат после применения разбиения по словам, тезауруса и списка остановок). Поэтому, если вы передадите ему 'FORMSOF (....)', он даст вам желаемый результат (ну, вам все равно придется обрабатывать набор результатов). Вот соответствующая статья в MSDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...