1

У меня есть таблица с именем «факт» с заголовком столбца, который должен быть полным текстовым индексом.Полный поиск текста всегда возвращает пустой набор результатов

Во-первых, я добавляю полнотекстовый индекс:

ALTER TABLE fact ADD FULLTEXT title_fts (title) 

Так я вставить строку:

INSERT INTO fact (id, title) VALUES ('1', 'red blue yellow ok green grey ten first wise form'); 

А потом выполнить поиск:

select * from fact f where contains (f.title, '"red" or "blue"') 

Когда я выполнить следующий запрос или любой другой запрос с оператором 'contains', я получаю набор результатов emtpy:

Я должен использовать это утверждение, не против матча или подобного. У кого-нибудь есть идея, почему это происходит? Спасибо.

+0

Это не полный поиск текста, который вам нужен для синтаксиса 'match to' –

+0

Вы совершенно правы. Это решило. Спасибо! – YoungDev

ответ

2

Есть два действительно важные понятия при использовании полнотекстового поиска. Первая - минимальная рабочая длина (см. here). По умолчанию значение равно 4, что означает, что слова, меньшие, чем это, игнорируются. До свидания «красный», «хорошо», «десять» и другие короткие слова.

Вторая важная концепция - список слов остановки (см. here). Это также избавит вас от «ok» и «first».

Ваш текст не имеет «синий», а «красный» игнорируется, поэтому ваш запрос ничего не возвращает.

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

+0

Большое вам спасибо! Но, когда я делаю то же самое с (только) 5-буквенными словами, то есть: выберите * из факта f, где содержится (f.title, «зеленый или желтый»), я все равно получаю пустой набор результатов. Следует ли переконфигурировать полный текстовый индекс? – YoungDev

+1

@YoungDev. , , Вам также нужно узнать о логическом режиме и режиме естественного языка. Структура ваших запросов предполагает, что вы должны придерживаться логического режима. –

+0

Я читаю об этом. Еще раз спасибо! :) – YoungDev