Работающий с Булевыми Вопросами в MySQL / PHP
, Булевые вопросы способа стали доступными в MySQL в версии 4, и позволять выражениям использовать сложный набор булевые правила усовершенствовать их поиски. Эти вопросы очень сильны когда относящийся fulltext поиск и сортировка результатов. MySQL / PHP инструмент поиска , который я создал, является очень основным, и только берет преимущество самых основных операторов в Булевом поиске способа. Этот документ идет немного больше в глубину на власть, доступная для Булевых вопросов способа.
основной формат булевого вопроса способа (подмножество fulltext подвергает сомнению ) следующие:
ВЫБИРАЮТ * ИЗ mytable, ГДЕ СОСТЯЗАНИЕ (название, содержание)
ПРОТИВ (' критерии поиска ' В БУЛЕВОМ СПОСОБЕ)
Этот вопрос выполняет ИЗБРАННОЕ восстановление всех областей в "mytable" где области "title" и "content" are ПОДОБРАННЫЙ ПРОТИВ Ваших критериев поиска , с дополнительной спецификацией, чтобы поместить вопрос в булевый способ. Без "IN БУЛЕВЫЙ MODE" модификатор, Вы выполняете естественный полный текстовый поиск, который будет искать Ваши критерии поиска как a фраза. Этот поиск естественного языка полезен, так как он применяет список общих "stop words" который это устраняет от Вашего поиска, так же как игнорирующий любой подарок термина в больше чем 50 процентах рядов.
Всем полным текстовым поискам помогают, обеспечивая индекс FULLTEXT на обысканном столе - но это не требуется, просто более эффективное. Фаллтекст ищет, может только быть выполнен на MySQL столы типа MyISAM .
Булевы операторы Мискла
Эти определения изменены от Мискла 5.0 ручных страниц на fulltext булевый поиск .
- + (плюс)
- Указывает, что термин обязан присутствовать в каждом возвращенном ряду.
- - (минус)
- Указывает, что термин не должен присутствовать в каждом возвращенном ряду. Только действия, чтобы исключить ряды, которые подобраны другими критериями поиска. Используемый отдельно, минус оператор возвратит пустой набор.
- (никакой оператор)
- , Если никакой оператор не определен, термин является дополнительным. Его присутствие, однако, даст тому ряду более высокую уместность в результатах поиска.
- < (меньше чем) и > (больше чем)
- Используемый, чтобы увеличиться или уменьшить ранжирование уместности термина. > увеличивает ценность того термина и < уменьшения та ценность.
- () (круглые скобки)
- Круглые скобки привыкли к подвыражениям группы, и может быть вложен.
- (тильда)
- Подобный минус оператор, тильда заставляет присутствие термина уменьшать уместность возвращенного ряда, но не исключает тот ряд из результатов.
- * (звездочка)
- звездочка оператор группового символа - это должен быть , приложил к слову, вместо того, чтобы предшествовать этому, и будет соответствовать любому термину, который начинается с той последовательности характеров.
- “ ” (характеры цитаты),
- Расценки потребует, чтобы вложенная фраза была согласована точно как напечатано. До Мискла 5.03, характеры слова и характеры неслова были подобраны точно. На Мискла 5.03 и позже, характеры неслова больше не должны соответствовать точно. Пример: "test phrase" ; может теперь возвращаться "test,phrase".
Применение Булевых операторов Мискла
Комбинирующий эти операторы различными способами может обеспечить логически точные или очень соответствующие поиски. Например, в следующем вопросе, мы хотим найти отчеты, которые являются о поиске, но мы действительно не интересуемся обсуждениями критериев поиска - мы больше интересуемся , ищут двигатели . Однако, мы знаем, что эти сроки часто группируются. Мы действительно не хотим исключать что-нибудь, , так как эти сроки появляются вместе весьма часто - но "terms" определенно менее важно для нас.
ВЫБИРАЮТ * ИЗ mytable, КУДА СОСТЯЗАНИЕ (название, содержание)
ПРОТИВ ('+search* термин' В БУЛЕВОМ СПОСОБЕ)
вышеупомянутый вопрос возвратит все отчеты, содержащие слово "search" включая сроки, происходящие от "search" такой as "searching" "searched" и так далее. Отчеты, которые также включают слово "term" будет включен в поиск, но будет менее относиться к делу. Булевый поиск способа, однако, автоматически не сортирует уместностью. Чтобы заказать этому уместность, Вы должны будете добавить ЗАКАЗ спецификацией к вопросу:
ВЫБИРАЮТ * ИЗ mytable, ГДЕ СОСТЯЗАНИЕ (название, содержание)
ПРОТИВ ('+search* термин' В БУЛЕВОМ СПОСОБЕ) ЗАКАЗ уместностью DESC
вопрос будет теперь сортирован, обеспечивая лучшие результаты сначала - то есть, те результаты, содержащие необходимую фразу большинство раз и нежеланный термин наименьшее количество времен.
особенно запутывающая вещь, чтобы понять - то, как Мискл Булевый поиск применяет уместность. В порядке уместности операторы + (абсолютно требуются), > (привилегированный), < (менее важный), [никакой оператор] (дополнительный), (нежелательный, но не исключенный), и - (исключенный полностью). Решение на Вашем предпочтении между < и может быть весьма трудным. То, что важно, является этим < будет увеличивать уместность термин, где как желание фактически уменьшают уместность. < просто увеличения это очень минимально. Или или - возвратится никакие результаты когда использующийся - < все еще возвратит кое-что.
Для подробной информации относительно булевого выигрыша уместности Мискла, я рекомендовал бы читать Используя Индексы Fulltext в Мискле - Часть 2, Булевые поиски , Ианом Джилфиллэном. Часть 1 также ценна, но его обсуждение уместности может быть особенно полезно!
Для Дальнейшего Чтения:
, Если Вы хотите лучшую информацию относительно продвинутого использования Мискла и методов, я рекомендую покупать книгу, такую как Высокая эффективность Мискл , Джереми Зоодни и Дереком Баллингом или Поваренной книгой Мискла , Полом Дубоисом. Любой из них даст Вам большую информацию- , первая книга больше об определенных методах для того, чтобы улучшить работу Ваших вопросов MySQL, второе даст Вам ценный решения большого разнообразия MySQL программирование проблем.
