SQL: полнотекстовый поиск не работает, если поисковая фраза имеет номер внутри?

Моя поисковая фраза "тестовый документ".

У меня есть запрос с полнотекстовой поисковой фразой, как это:

SELECT doc.iEntityId, doc.strName, doc.iHandbookId
FROM m136_tblDocument doc
WHERE iLatestApproved = 1
AND doc.iDeleted = 0
AND (
(CONTAINS(doc.strName, '"test doc*"')))

Результат как эта картина: результат

Но если я попытаюсь поставить поисковую фразу, это "test doc 3".

Это не дает никакого удара. результат

Мой ожидаемый даст 3 хита: тестовый документ 23, тестовый документ 3 и тестовый документ 1.3.1

Кто-нибудь может мне помочь?

Заранее спасибо.

1 ответ

Решение

Полный текст предназначен для текстов, больших текстов. В вашем примере вы ищете что-то маленькое. Мелким является любой текст, который короче, чем около 100 символов.

Этот код будет работать для вас всегда.

SELECT doc.iEntityId, doc.strName, doc.iHandbookId
FROM m136_tblDocument doc
WHERE iLatestApproved = 1
AND doc.iDeleted = 0
AND doc.strName LIKE '%test doc 3%'

Использование полного текста может быть немного проблематичным. В Microsoft Connect обнаружены ошибки для этой функции. Чтобы правильно использовать эту функцию, вы должны прочитать BOL для нее. Например, этот хорошо описывает функцию - https://www.simple-talk.com/sql/learn-sql-server/sql-server-full-text-search-language-features/

Для вашего случая я советую заменить его на LIKE, и не беспокойтесь. Индексы могут улучшить производительность запросов. Сделайте небольшую настройку, чтобы увидеть, нужен ли вам индекс.

Другие вопросы по тегам