Sql сервер полнотекстовый поиск по списку слов - PullRequest
0 голосов
/ 18 февраля 2019

Я борюсь с синтаксисом выражений функции полнотекстового поиска на сервере SQL.

У меня есть список пользовательских "слов", которые необходимо найти в столбце моей таблицы:

SELECT DocumentNode, DocumentSummary  
FROM Production.Document  
WHERE CONTAINS(DocumentSummary, '"word1" OR "word2"') 

Есть ли эффективный способ сделать это для списка слов с x-номерами?Что-то лучше, чем:

'"word1" OR "word2" ... OR "wordx"'

ОБНОВЛЕНИЕ: Позвольте мне уточнить, что моя таблица (для примера здесь - Production.Document) имеет несколько миллионов записей, поэтому мне нужно, чтобы запрос имеллучшая производительность возможна.Также запрос может выполняться несколько тысяч раз в день.Я пишу это, чтобы объяснить, почему запросы LIKE не подходят.

PS: Если есть какой-то альтернативный подход, который мне не хватает (кроме полнотекстового поиска), пожалуйста, сообщите.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Нет способа сделать это с помощью CONTAINS, так как CONTAINS принимает столбец только в качестве первого параметра, а не второго.Однако вы можете поместить свои слова в таблицу, а затем использовать динамический sql для выполнения запроса:

Declare @WordTable table
     (Id int primary key,
      Word varchar(25))

Insert @WordTable values (1, 'word1')
Insert @WordTable values (2, 'word2')
Insert @WordTable values (3, 'word3')

DECLARE @Words VARCHAR(MAX)

SELECT @Words = STUFF ((
        SELECT '"' + Word + '" OR '
        FROM @WordTable
        FOR XML PATH('')
    ), 1, 0, '')

--drop the last OR
  SELECT  @Words = SUBSTRING(@Words, 0, LEN(@Words) - 2)

  DECLARE @Query VARCHAR(MAX)
  SELECT  @Query = 'SELECT DocumentNode, DocumentSummary  
                    FROM Production.Document  
                    WHERE CONTAINS(DocumentSummary, ''' + @Words +''')'

  EXEC(@Query)
0 голосов
/ 18 февраля 2019

Если вам нужно найти все слова в списке, используйте оператор 'LIKE', например:

SELECT Document.Node, Document.Summary
FROM Production.Document
WHERE Document.Summary LIKE '%word1%'
  AND Document.Summary LIKE '%word2%'

С другой стороны, если вам нужно найти любое слово в списке просто изменить логическую операцию на ИЛИ.Надеюсь, это поможет:)

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