2016-01-13 4 views
1

В настоящее время я изучаю использование индексов FULLTEXT в MySQL для поиска в веб-сайте.Индексы FullText в нескольких столбцах переменных

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

Я создал 1 индекс для заголовка, 1 индекса для описания и 1 индекс для комментариев, а затем попытался выполнить следующий запрос:

SELECT * FROM support_calls WHERE MATCH(Title, Description) AGAINST('+these, +are, +some, +keywords') 

Я получил ошибку от MySQL говорит, что MATCH не совпадали с полными текстовыми индексами, и я обнаружил, что мне нужно создать индекс, который включал Title и Description вместе вместо того, чтобы иметь их в отдельных индексах.

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

Спасибо за любую помощь, которую вы можете предоставить.

+0

AFAIK, это ограничение MySQL, которое вы не можете переопределить. В зависимости от ваших потребностей вы можете «MATCH (Title) AGAINST (« + эти, +, + некоторые, + ключевые слова ») ИЛИ MATCH (Описание) AGAINST (« + эти, + есть, + некоторые, + ключевые слова » ') 'и использовать ранги для сортировки или дальнейшей фильтрации. –

+0

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

+0

Я далек от того, чтобы быть экспертом в полном тексте, и я не хочу публиковать потенциально ошибочный или простой неправильный ответ. Например, я просто полагаю, что требования к индексу различны в зависимости от механизма хранения и логического/естественного режима [ref] (https://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html) , –

ответ

0

сначала выполните запрос ниже, а затем запустите запрос MATCH().

ALTER TABLE support_calls ADD FULLTEXT (
Title, Description 
) 
+0

ОП уже признает это. Вопрос заключается в альтернативе созданию нового индекса для каждой возможной комбинации столбцов. –

+0

вы также можете использовать как% word% или любые другие символы дикой карты вместо MATCH –

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