У меня есть столбец с названиями продуктов. Некоторые имена выглядят как «ab-cd» ab cd Можно ли использовать полнотекстовый поиск для получения этих имен, когда пользователь вводит «abc» (без пробелов)? Оператор like
работает для меня, но я хотел бы узнать, можно ли использовать полнотекстовый поиск.Полный текстовый поиск и пробелы SQL Server
ответ
Нет, к сожалению, вы не можете осуществлять такой поиск через полнотекстовый текст. Вы можете использовать только LIKE
в этом случае LIKE ('ab%c%')
EDIT1:
Вы можете создать представление (WITH SCHEMABINDING
!) С некоторыми id
и имя столбца, в котором вы хотите искать:
CREATE VIEW dbo.ftview WITH SCHEMABINDING
AS
SELECT id,
REPLACE(columnname,' ','') as search_string
FROM YourTable
Затем создайте индекс
CREATE UNIQUE CLUSTERED INDEX UCI_ftview ON dbo.ftview (id ASC)
Тогда cre ate полнотекстовый индекс поиска на search_string
поле.
После этого вы можете запросить CONTAINS
запрос с поиском "abc*"
и он найдет то, что вам нужно.
EDIT2:
Но это не поможет, если search_string
не начинается с поиска.
Например:
AB C d -> ABCD и поиске cd
Я не понимаю вашего комментария. OP писал: * Можно ли использовать полнотекстовый поиск, чтобы получить эти имена, когда пользователь вводит «abc» (без пробелов) *, так что о «не используя FTS». Просьба уточнить. – gofr1
извинился, не прочитал ваш ответ. Тем не менее, я не думаю, что объединение всех слов в один супер-термин - разумное решение. Что вы будете делать, если сверхсрочный срок не начинается с вашего первого поискового запроса. – Jodrell
Вы правы, это проблема. Спасибо, я должен добавить эту информацию в свой ответ. – gofr1
No. полнотекстовый поиск на основе слов и фраз. Он не сохраняет исходный текст. Фактически, в зависимости от конфигурации он даже не сохранит все слова - есть так называемые стоп-слова, которые никогда не входят в индекс. Пример: на английском языке слово «in» не является достаточно избирательным, чтобы считаться заслуживающим хранения.
Некоторые имена похожи на «AB-CD» «AB CD»
Те, вероятно, не сохраняются вообще. По крайней мере, второй пример на самом деле является 2 чрезвычайно короткими словами - вполне вероятно, что они полностью игнорируются.
Таким образом, нет - полный текстовый поиск не подходит для этого.
на самом деле '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '. – Jodrell
Я не уверен, что нет также минимальной длины слова - поэтому ab и cd можно просто проигнорировать из-за этого. – TomTom
'ab-cd' 'ab cd' - это были не реальные данные, просто пример. И спасибо за ответ - «полнотекстовый поиск не подходит для этого» - вот что я хотел знать – Serg88
Если вы хотите использовать FTS, чтобы найти термины, которые находятся рядом друг с другом, например слова, разделенные пробелом, вы должны использовать термин близости.
Вы можете определить термин близости, используя ключевое слово NEAR
или оператор ~
в выражении поиска, as documented here.
Так что, если вы хотите найти ab
сразу за cd
вы могли бы использовать выражение,
'NEAR((ab,cd), 0)'
ищет слово ab
с последующим словом cd
с 0 в терминах между ними.
Но если пользователь поместил 'abc' в строку поиска, как бы я теперь, чтобы 'NEAR ((ab, cd), 0)' был создан? – Serg88
@ serg88, по-видимому, вам придется разбирать текст и искать «abc | a-bc | ab-c | abc | NEAR ((a, bc), 0) | NEAR ((ab, c), 0) | NEAR ((a, b, c), 0) '', так как длина строки продолжается, вы можете увидеть, что сложность будет расти экспоненциально. – Jodrell
- 1. Поиск фразы с использованием SQL Server Полный текстовый поиск
- 2. Полный текстовый поиск в SQL Server и Oracle
- 3. Полный текстовый поиск MS SQL
- 4. ASP.NET/sql полный текстовый поиск
- 5. Полный текстовый поиск на сервере sql
- 6. Полный текстовый поиск SQL Server с орфографическими ошибками в контенте
- 7. Полный текстовый поиск SQL Server - Создайте один вычисленный столбец
- 8. Исключить апострофы из SQL Server Полный текстовый поиск
- 9. Получить частоты слов из SQL Server Полный текстовый поиск
- 10. Повторно постройте полный текстовый индекс SQL Server
- 11. Полный текстовый поиск в SQL Server 2008 Express Advanced
- 12. CF9's Apache Lucene - полный текстовый поиск SQL Server?
- 13. Полный текстовый поиск CONTAINSTABLE
- 14. Полностью текстовый поиск SQL Server
- 15. Laravel полный текстовый поиск
- 16. mysql полный текстовый поиск
- 17. Полный текстовый поиск на SQL-сервере 2008
- 18. Полный текстовый индекс на SQL Server 2008
- 19. Полный текстовый поиск по столбцам
- 20. MySQL полный текстовый поиск (php)
- 21. SQL Server полностью текстовый поиск слишком медленный
- 22. Имеет ли Microsoft Access полный текстовый поиск?
- 23. sql полный текстовый поиск не поиск точной фразы
- 24. Полный текстовый поиск в gerrit?
- 25. SQL Server 2012 Полный текст Поиск Sproc
- 26. Flask - SQLAlchemy полный текстовый поиск
- 27. Django MySQL полный текстовый поиск
- 28. Полный текстовый поиск по резюме
- 29. SQlite Полный текстовый поиск (FTS)?
- 30. Удалить полный текстовый поиск Google
Полный текст поиска - * язык * предназначенный. Он работает с точки зрения * слов * и * фраз *. Вы не должны ожидать, что он будет работать с пробелами или пунктуацией, которые он уже использует, чтобы * отделить слова. –