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, и не беспокойтесь. Индексы могут улучшить производительность запросов. Сделайте небольшую настройку, чтобы увидеть, нужен ли вам индекс.