Подтвердить что ты не робот

SQL полный текстовый поиск против "LIKE"

Скажем, у меня довольно простое приложение, которое позволяет пользователям хранить информацию на своих DVD-дисках (название, актеры, год, описание и т.д.), и я хочу разрешить пользователям выполнять поиск их коллекции по любому из этих полей (например, Киану Ривз "или" Матрица "будут действительными поисковыми запросами).

В чем преимущество перехода с полным текстовым поиском SQL и просто разбиением запроса на пробелы и выполнением нескольких предложений "LIKE" в инструкции SQL? Он просто работает лучше или он действительно вернет результаты, которые более точны?

4b9b3361

Ответ 1

Полнотекстовый поиск, скорее всего, будет более быстрым, так как он будет пользоваться индексом слов, который он будет использовать для поиска записей, тогда как для использования LIKE потребуется полное сканирование таблицы.

В некоторых случаях LIKE будет более точным, так как LIKE "% the%" И LIKE "% Matrix" выберет "Матрицу", но не "Matrix Reloaded", тогда как полнотекстовый поиск будет игнорировать "The" и вернуть оба. Тем не менее, оба варианта, вероятно, были бы лучшим результатом.

Ответ 2

Полнотекстовые индексы (которые являются индексами) намного быстрее, чем использование LIKE (которое по существу рассматривает каждую строку каждый раз). Однако, если вы знаете, что база данных будет небольшой, возможно, не требуется производительность для полнотекстовых индексов. Единственный способ определить это - с помощью некоторого интеллектуального усреднения и некоторого тестирования на основе этой информации.

Точность - это другой вопрос. Полнотекстовое индексирование позволяет вам делать несколько вещей (взвешивание, автоматическое сопоставление еды/ест/еды и т.д.), Которые невозможно реализовать в любом разумном временном кадре с использованием LIKE. Реальный вопрос: нужны ли вам эти функции.

Не прочитав полнотекстовую документацию, описывающую эти функции, вы действительно не узнаете, как действовать. Итак, прочитайте!

Кроме того, некоторые базовые тесты (вставьте кучу строк в таблицу, возможно, с каким-то общедоступным словарем в качестве источника слов) помогут вам решить.

Ответ 3

Полнотекстовый поисковый запрос выполняется намного быстрее. Особенно при работе с большим количеством данных в разных столбцах.

Кроме того, у вас будет поддержка поиска по конкретному языку. Например. Немецкие умлауты, такие как "ü" в "über", также будут найдены при сохранении как "ueber". Также вы можете использовать синонимы, где вы можете автоматически расширять поисковые запросы или заменять или заменять определенные фразы.

В некоторых случаях LIKE будет более точным так как LIKE "% the%" И КАК "Матрица%" выберет "Матрицу", но не "Matrix Reloaded", а полный текст поиск будет игнорировать "The" и вернуться и то и другое. Это говорит о том, что был лучшим результатом.

Это неверно. Синтаксис полного текстового поиска позволяет указать "как" вы хотите выполнить поиск. Например. используя оператор CONTAINS, вы можете использовать точное совпадение терминов, а также нечеткое совпадение, вес и т.д.

Итак, если у вас есть проблемы с производительностью или вы хотели бы предоставить более "Google-подобный" поиск, перейдите на полнотекстовый поисковый движок. Это также очень легко настроить.

Ответ 4

Всего несколько заметок:

  • LIKE может использовать поиск индекса, если вы не запустите свой LIKE с%. Пример: LIKE "Santa M%" - это хорошо! LIKE '% Maria' плохой! и может вызвать табличное или индексное сканирование, потому что это невозможно проиндексировать стандартным способом.

  • Это очень важно. Обновления полнотекстовых индексов являются асинхронными. Например, если вы выполняете INSERT в таблице, а затем SELECT с полнотекстовым поиском, где вы ожидаете появления новых данных, вы можете не получить данные немедленно. На основе вашей конфигурации вам, возможно, придется подождать несколько секунд или один день. Как правило, полнотекстовые индексы заполняются, когда в вашей системе не так много запросов.

Ответ 5

Он будет работать лучше, но если у вас много данных, вы не заметите эту разницу. Индекс полного текстового поиска SQL позволяет использовать более продвинутые операторы, чем простая операция "LIKE", но если все, что вы делаете, эквивалентно операции LIKE против вашего полного текстового индекса, то ваши результаты будут одинаковыми.

Ответ 6

Представьте, если вы разрешите вводить примечания/описания на DVD-дисках. В этом случае будет полезно разрешить поиск по описаниям. Полнотекстовый поиск в этом случае улучшит работу.

Ответ 7

Вы можете получить немного лучшие результаты или, по крайней мере, иметь более легкую реализацию с полным индексированием текста. Но это зависит от того, как вы хотите, чтобы он работал...

Что я имею в виду, так это то, что если вы ищете два слова, с LIKE, вы должны вручную реализовать (например) метод для взвешивания тех, у кого выше в списке. Полнотекстовый индекс должен сделать это для вас и позволить вам также влиять на весы с использованием соответствующего синтаксиса.

Ответ 8

К FullTextSearch в SQL Server как LIKE
Во-первых, вам нужно создать StopList и назначить его таблице

CREATE FULLTEXT STOPLIST [MyStopList];
GO
ALTER FULLTEXT INDEX ON dbo.[MyTableName] SET STOPLIST [MyStopList]
GO

Во-вторых, используйте следующий tSql script:

SELECT * FROM dbo.[MyTableName] AS mt
WHERE CONTAINS((mt.ColumnName1,mt.ColumnName2,mt.ColumnName3), N'"*search text s*"')

Ответ 9

Если вы не просто ищете английское слово, скажите, что ищете китайское слово, то как ваш fts токенизирует слова, ваш поиск будет сильно отличаться, так как я привел пример здесь fooobar.com/info/177519/.... Но я не знаю, как сервер sql токенизирует китайские слова, делает ли он хорошую работу для этого?