Ну вот видите, сколько действий вам нужно делать, чтобы организовать поиск с помощью БД. Плюс вы столкнетесь со следующими проблемами:
1. БД сможет использовать только полнотекстовый индекс, а если у вас еще будет фильтрация по другим параметрам, это будет производиться без индексов, т.е. медленно. В статье я поставил простую задачу, на самом деле мне нужно было фильтровать записи по десятку параметров;
2. В Sphinx существует множество режимов поиска, в каждом из них идут свои «бонусы»;
3. С помощью прстого указания между режимами SPH_MATCH_ALL, SPH_MATCH_ANY можно задать поиск по всех словам из фразы или по любому из слов и все это с учетом морфологии;
4. В режиме SPH_MATCH_EXTENDED, помимо стандартных операторов AND, OR, NOT можно задавать близость слов: «example program»~5 – такое условие говорит Sphinx, что между словами example и program должно быть не более 5-ти слов; а также порог на количество слов: «Петя Пупкин пошел гулять по лесу»/3 возвращает те записи, где встречается хотя бы 3 из 6 слов в заданной фразе.
5. В Sphinx введен режим SPH_MATCH_FULLSCAN, когда поисковая фраза пустая и заданы только фильтры и группирование. В документации пишут, что выборка записей по фильтрам идет в некоторых случаях даже быстрее, чем в MySQL. Я также перевел некоторые запросы с большими условиями на Sphinx, чтобы разгрузить БД.
6. В индекс может понадобиться включить что-то не хранящееся в БД, а Sphinx, как я писал, умеет искать и по xml, html, почте и др.
Нет, вы понимаете, заказчику важен не код, а насколько удобна и закончена система, написанная вами. Если ему что-то захотелось изменить, тем более, если эти изменения идут как доработки за доп. оплату, вы с этим ничего не поделаете. Заказчику все равно, насколько у вас там красивая архитектура получилась :)
В PHP похожие конструкции можно использовать, месяца 3 назад был пост на Хабре про такие финты на PHP. Используется принцип интерпретатора не разбирать дальнейшие условия в логической конструкции, если первая ложна.
Да, эти материалы я, конечно же, видел и по ним пытался все настроить, но не получилось. Дамп у меня также есть в наличии, но интересно было бы знать, какие данные хранит каждая таблица: по названиям некоторых можно понять (типа vcard), что они хранят, а по остальным приходится только гадать…
Очень полезная информация, спасибо!
У меня возникла такая необходимость – подключить внешнюю БД к ejabberd, в частности MySQL, а также найти описание модели БД ejabberd. Ни первое, ни второе не удалось выполнить, пробовал на Debian, WinXP, Mac OS X… Были бы интересны статьи на эти темы или хотя бы просто ваш совет.
Вот! Надо было точнее говорить :) Есть такая проблема, я тоже руками корректировал, можно попробовать автору плагина выслать эту откорректированную версию, чтобы он посмотрел и опубликовал в репозитории.
Вспомнилось одно из сочинений абитуры на тему «Мир через 50 лет»:
В Антарктиде найдут нефть, что на следующий же день вызовет оккупацию континента Соединёнными Штатами под девизом борьбы с вселенским антарктическим терроризмом. СМИ запестрят сообщениями о пытках, которым якобы подвергаются пингвины в тайных тюрьмах ЦРУ. Образ пигвинёнка Лоло в американской мультипликации будет признан антидемократическим и наравне с картиной «Мадагаскар» строжайше запрещён специальной комиссией Конгресса.
1. БД сможет использовать только полнотекстовый индекс, а если у вас еще будет фильтрация по другим параметрам, это будет производиться без индексов, т.е. медленно. В статье я поставил простую задачу, на самом деле мне нужно было фильтровать записи по десятку параметров;
2. В Sphinx существует множество режимов поиска, в каждом из них идут свои «бонусы»;
3. С помощью прстого указания между режимами SPH_MATCH_ALL, SPH_MATCH_ANY можно задать поиск по всех словам из фразы или по любому из слов и все это с учетом морфологии;
4. В режиме SPH_MATCH_EXTENDED, помимо стандартных операторов AND, OR, NOT можно задавать близость слов: «example program»~5 – такое условие говорит Sphinx, что между словами example и program должно быть не более 5-ти слов; а также порог на количество слов: «Петя Пупкин пошел гулять по лесу»/3 возвращает те записи, где встречается хотя бы 3 из 6 слов в заданной фразе.
5. В Sphinx введен режим SPH_MATCH_FULLSCAN, когда поисковая фраза пустая и заданы только фильтры и группирование. В документации пишут, что выборка записей по фильтрам идет в некоторых случаях даже быстрее, чем в MySQL. Я также перевел некоторые запросы с большими условиями на Sphinx, чтобы разгрузить БД.
6. В индекс может понадобиться включить что-то не хранящееся в БД, а Sphinx, как я писал, умеет искать и по xml, html, почте и др.
поэтому, собственно, у вас инициализация массива взята в скобки =)
Да, и Tagire ниже верно подметил, в PHP для таких манипуляций используется and и or.
У меня возникла такая необходимость – подключить внешнюю БД к ejabberd, в частности MySQL, а также найти описание модели БД ejabberd. Ни первое, ни второе не удалось выполнить, пробовал на Debian, WinXP, Mac OS X… Были бы интересны статьи на эти темы или хотя бы просто ваш совет.
В Антарктиде найдут нефть, что на следующий же день вызовет оккупацию континента Соединёнными Штатами под девизом борьбы с вселенским антарктическим терроризмом. СМИ запестрят сообщениями о пытках, которым якобы подвергаются пингвины в тайных тюрьмах ЦРУ. Образ пигвинёнка Лоло в американской мультипликации будет признан антидемократическим и наравне с картиной «Мадагаскар» строжайше запрещён специальной комиссией Конгресса.