Как мне узнать позицию совпадения в ФОРМАТОВОМ ИНФЛЕКЦИОННОМ полнотекстовом поиске? - PullRequest
2 голосов
/ 08 сентября 2010

Я использую запрос CONTAINSTABLE с механизмом полнотекстового индексирования MS SQL Server для поиска в текстовом столбце;например:

SELECT * 
FROM MyTable
INNER MERGE JOIN CONTAINSTABLE(MyTable, sDescription, 'FORMSOF(INFLECTIONAL, "brains")')
    AS TBL1 ON TBL1.[key]=MyTable.ixKey

Это делает большую работу по поиску строк с описанием, включающим такие слова, как «мозги» (например, «мозг», «мозг»).Однако, когда я показываю эти результаты пользователю, я хотел бы выделить слово, которое соответствует его запросу (как в Google).Но я не могу просто искать поисковый термин в результатах: если результат содержит «мозг», я, очевидно, не могу выделить «мозги».

Может ли SQL Server сказать мне, где в столбце (либослово или символ) полнотекстовое совпадение происходит?В качестве альтернативы, я могу вручную запустить stemmer, чтобы получить все формы поискового запроса?Тогда я мог бы выделить каждый из них в отдельности.

Ответы [ 2 ]

3 голосов
/ 09 сентября 2010

SQL Server 2008 включает в себя функцию для получения перекошенных форм слова или фразы с использованием синтаксического анализатора полнотекстового движка: sys.dm_fts_parser.

SELECT display_term, source_term, occurrence FROM sys.dm_fts_parser('FORMSOF(INFLECTIONAL, "brains")', 1033, 0, 0)

получает таблицукак:

display_term | source_term | occurrence
---------------------------------------
brain        | brains      | 1
brains       | brains      | 1
brained      | brained     | 1

(Работа с фразами запросов - это немного больше работы, так как это затрагивает каждое слово в отдельности, но не слишком сложно собрать вещи обратно.)

Теперь я могупросто выделите любое вхождение любой из изогнутых форм.Это немного больше работы, чем если бы SQL Server только что сказал мне, где совпадения FTS, но это подойдет.

0 голосов
/ 22 октября 2013

Значение в столбце результата expansion_type указывает на это.Тип расширения 2 - ИНФЛЕКЦИОННЫЙ, а 4 означает расширение ключевого слова тезауруса:

FORMSOF(THESAURUS, "Co")
source_term display_term    expansion_type
Co  co  0
Co  company 4

FORMSOF(INFLECTIONAL, "Dog")
source_term display_term    expansion_type
Dog dog 0
Dog dogs    2
Dog dogged  2
Dog dogging 2

SQL

SELECT 
source_term,
display_term,
expansion_type
FROM sys.dm_fts_parser (FORMSOF(INFLECTIONAL, "Dog"), 1033, 0, 0)
order by source_term, expansion_type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...