2010-09-05 1 views
19

Как указано в заголовке, что такое полнотекстовый индекс и когда его использовать?Что такое полнотекстовый индекс и когда его использовать?

+1

Пожалуйста, перефразируйте свой вопрос. Что вы хотите узнать? Что вы подразумеваете под «когда использовать полнотекстовый индекс» - помимо очевидного ответа «когда вы планируете полнотекстовый поиск»? –

ответ

13

В базах данных индексы обычно используются для повышения производительности при поиске чего-то определенного в вашем предложении where. Однако, когда дело доходит до фильтрации некоторого текста, например. используя что-то вроде WHERE TextColumn LIKE '%searchstring%', поиск выполняется медленно, потому что работа регулярных индексов базы данных оптимизирована для совпадений с «целым контентом» столбца, а не только его частью. В частности, поиск LIKE, который включает в себя подстановочные знаки, не может использовать какой-либо индекс.

Как указано в комментарии ниже, MySQL нуждается в синтаксисе MATCH() ... AGAINST для поиска в полнотекстовом индексе; BTW это зависит от поставщика базы данных. В MS SQL вы можете использовать CONTAINS, поэтому имейте это в виду, когда вы планируете также поддерживать другие базы данных.

Полнотекстовые индексы работают лучше для обычного текста, потому что они оптимизированы для этих типов столбцов. Очень упрощено: они разбивают текст на слова и делают указатель на слова, а не весь текст. Это значительно ускоряет поиск текста при поиске конкретных слов.

+6

Индексы FULLTEXT ничего не сделают для предложений LIKE - они будут использоваться только для предложений 'MATCH() ... AGAINST'. Предложения LIKE, которые начинаются с '' '' шаблона, не могут быть эффективно ускорены * любым типом индекса и всегда будут медленными. По этой причине этот тип предложения LIKE следует избегать, если не фильтровать уже небольшое количество записей. – thomasrutter

+2

Итак, если вы ищете точное совпадение со всей строкой, индекс FULLTEXT - это неправильная вещь? – aroth

+1

@aroth при поиске по всему содержимому столбца полнотекстовый индекс не был бы полезен вообще, да. – Alex

10

Полный текстовый индекс - это индекс, который вы применяете в базе данных MySQL, к текстовым полям, на которых вы планируете полнотекстовый поиск. Полнотекстовый поиск использует синтаксис match(field) against('text'). Если вы хотите запустить полнотекстовый поиск, у вас должен быть полный текстовый индекс в столбцах, в которых вы его используете.

Существует три типа поиска полного текста. Я процитирую инструкцию, потому что я думаю, что он говорит, что лучше:

  • Логическое поиск интерпретирует строку поиска, используя правила в специального языка запросов. Строка содержит слова для поиска. В нем могут также содержать операторы, которые определяют требования, так что слово должно присутствовать или отсутствовать при сопоставлении строк или что оно должно быть взвешено выше или ниже обычного. Обычные слова, такие как «some» или «then», являются стоп-словами и не совпадают, если они присутствуют в строке поиска. Модификатор MODE IN BOOLEAN определяет логический поиск . Для получения дополнительной информации см. Раздел 11.9.2, «Логический полный текст Ищет».

  • Поиск на естественном языке интерпретирует строку поиска как фразу « » на естественном человеческом языке (фразу « » в тексте бесплатно). Нет специальных операторов . Включен список стоп-слов . Кроме того, слова, которые являются , присутствующими в 50% или более строк, являются , которые считаются общими и не совпадают. Полнотекстовые поиски являются естественными язык ищет, если модификатор не указан .

  • Поисковый запрос поиска - это модификация естественного языка поиск. Строка поиска используется для выполняет поиск по естественному языку. Затем слова из наиболее релевантных строк , возвращенные поиском, добавляются к строке поиска и поискам сделано снова. Запрос возвращает строки со второго поиска. WITH QUERY Модификатор EXPANSION задает запрос поиска . Дополнительную информацию см. В разделе 11.9.3, «Полнотекстовые поисковые запросы с запросом « Расширение ».

Для получения дополнительной информации взглянуть на Full Text Search Reference Page.

Смежные вопросы