2016-05-26 3 views
0

я получаю неправильный результат после выполнения этого запроса:полнотекстового поиска с несколькими ключевыми словами

select 
    a.userid as userid, 
    b.CompanyProfile as cp, 
    MATCH (b.fldsearch) AGAINST ('+(computers computer) +(hardawre hardawres)' IN BOOLEAN MODE) as rank 
from users a , companymaster b 
where a.userid=b.userid and MATCH (b.fldsearch) 
AGAINST ('+(computers computer) +(hardawre hardawres)' IN BOOLEAN MODE) 

мне нужно только те результаты, которые содержат любую комбинацию из указанных ключевых слов означает «компьютер», «компьютеры» с «hardawre» , «hardawres»

И результат, который я получаю от выше запроса, содержащего либо только компьютер или компьютеры, но не с hardawre ИЛИ hardawres

+0

Добро пожаловать в переполнение стека. Вы можете отформатировать исходный код с помощью кнопки [Code Sample '{}'] (http://i.stack.imgur.com/VYd26.png) - я сделал это для вас на этот раз. –

ответ

0

Ваш запрос выглядит нормально, ваша проблема не имеет, скорее всего, ничего общего с ним. Вероятно, вы испытываете эту проблему во время тестов и с помощью innodb-tables.

Полнотекстовые индексы для innodb имеют малое неинтуитивное поведение. Согласно documentation

InnoDB полнотекстового индекса транзакции Обработка

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

Так что если вы работаете, например. с рабочим столом, вы просто должны указать commit; свои данные (или использовать команду с autocommit) после того, как вы добавили новые (тестовые) слова, чтобы добавить их в свой полнотекстовый индекс, чтобы ваш запрос мог их видеть.

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