Организация поиска по сайту
Организация поиска по сайту
Всем привет! Делаю поиск по сайту, и возник такой вопрос, что лучше, правильнее и самое главное производительнее like или fulltext+phpMorphy. Морфология не очень критично, поэтому подумываю о стеммере портера. В общем подскажите кто чем пользуется и как более правильно организовать поиск?
Re: Организация поиска по сайту
sphinx))) зачем еще что-то придумывать)
Сила аргументов, аргументы силы!
- RSol
- Сообщения: 325
- Зарегистрирован: 2010.05.07, 08:36
- Откуда: Северодонецк, Украина
- Контактная информация:
Re: Организация поиска по сайту
Правильней использовать что-то типа Sphinx.eche писал(а):Всем привет! Делаю поиск по сайту, и возник такой вопрос, что лучше, правильнее и самое главное производительнее like или fulltext+phpMorphy. Морфология не очень критично, поэтому подумываю о стеммере портера. В общем подскажите кто чем пользуется и как более правильно организовать поиск?
Посмотрел phpMorphy - интересный зверь. Набросал обертку для Yii. Использование:
0. Копируем в ext. В папку "vendor/dicts" копируем нужные словари.
1. Подключаем в конфиге:
Код: Выделить всё
'components'=>array(
...
'morphy'=>array(
'class'=>'ext.phpMorphy.RMorphy',
),
...
),
Код: Выделить всё
$roots = Yii::app()->morphy->getPseudoRoot(array('КУПЛЮ','КВАРТИРУ','УБИТУЮ','БЕЗ','РЕМОНТА'));
Код: Выделить всё
array
(
'УБИТУЮ' => array
(
'0' => 'УБИТ'
'1' => 'УБ'
)
'РЕМОНТА' => array
(
'0' => 'РЕМОНТ'
)
'КУПЛЮ' => array
(
'0' => 'КУП'
)
'КВАРТИРУ' => array
(
'0' => 'КВАРТИР'
)
'БЕЗ' => array
(
'0' => 'БЕЗ'
)
)
После указанного теста, мне кажется использование его для поиска... не очень.
- Вложения
-
- phpMorphy.zip
- (148.88 КБ) 257 скачиваний
Re: Организация поиска по сайту
Согласен, но хостинг виртуальный и сервера пока не предвидитсяPixoiD писал(а):sphinx))) зачем еще что-то придумывать)
Re: Организация поиска по сайту
А можно поподробнее, почему не очень?После указанного теста, мне кажется использование его для поиска... не очень.
- RSol
- Сообщения: 325
- Зарегистрирован: 2010.05.07, 08:36
- Откуда: Северодонецк, Украина
- Контактная информация:
Re: Организация поиска по сайту
А какой запрос Вы сформируете на основе этих данных?eche писал(а): А можно поподробнее, почему не очень?
Re: Организация поиска по сайту
Например, делаю таблицу в которую вношу эти данные и id записи, которой они соответствуют.
А дальше что то вроде
SELECT * FROM ... WHERE MATCH (...) AGAINST (...);
А дальше что то вроде
SELECT * FROM ... WHERE MATCH (...) AGAINST (...);
- RSol
- Сообщения: 325
- Зарегистрирован: 2010.05.07, 08:36
- Откуда: Северодонецк, Украина
- Контактная информация:
Re: Организация поиска по сайту
Для указанных данных предложите, что сюда вставить:
eche писал(а):AGAINST (...);
Re: Организация поиска по сайту
УБ РЕМОНТ КУП КВАРТИР БЕЗ или КВАРТИР или РЕМОНТ. В общем зависти от того, что пользователь ввел в строку поиска
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Организация поиска по сайту
Когда-то в словарях morphy были склонения русского слова Друпал Особенно нравилася форма «Друпало». Эдакое ругательство.
Нравится Yii? Давайте сделаем его лучше!.
Re: Организация поиска по сайту
Хы, друпало)))) И в продолжение темы еще вопрос. В форме для поиска есть 6 полей, в зависимости от того какие поля заполнены формируются разные запросы в БД. Но как проверять какие поля заполнены, а какие нет первым приходит на ум
и т.д. но такой способ очень громоздкий... Подскажите, возможно ли это сделать как нибудь проще?
Код: Выделить всё
if(empty(поле1) &&...&&empty(поле 6) )
{
все поля пустые
}
if(!empty(поле1) &&...&&empty(поле 6) ){
поле1 не пустое
}
Re: Организация поиска по сайту
Не совсем понял вопрос, но может так?
Код: Выделить всё
$notEmptyFields = array();
foreach($fields as $field) {
if($field == '') continue;
$notEmptyFields[] = $field;
}
Re: Организация поиска по сайту
Суть вопроса немного в другом. в форме для поиска квартиры есть поля город, улица, количество комнат, цена от, цена до ну и естественно строка поиска. Теперь пример, человек при поиске указал город в котором хочет найти квартиру , указал улицу, но не указал количество комнат и цену. Отправил форму, я получил данные и теперь нужно выбрать из базы квартиры в которых в описании встречается, то что пользователь ввел в строке поиска причем эти квартиры должны быть указанном городе на указанной улице. т.е в запросе к БД мне нужно указать конкретное поле в котором нужно искать эти значения. Я не знаю заранее какие поля заполнит юзер поэтому я не могу сформировать запрос...единственное решение которое я вижу тупой перебор заполненных полей, но получается много возможных сочетаний, например
1.указал только город
2. город и улицу
3. город и нижнюю планку цены
4. город, улицу и верхнюю планку
Ну и т.д . Вашим способом, конечно, я получу поля, но как их сопоставить с полями таблицы в БД? Надеюсь понятно объяснил
1.указал только город
2. город и улицу
3. город и нижнюю планку цены
4. город, улицу и верхнюю планку
Ну и т.д . Вашим способом, конечно, я получу поля, но как их сопоставить с полями таблицы в БД? Надеюсь понятно объяснил
Re: Организация поиска по сайту
Да, понятно. Я бы использовал CFormModel. Написал бы функцию, которая проходилась бы по аттрибутам и, если аттрибут задан, добавляла condition к запросу.
Re: Организация поиска по сайту
Думал об этом, но запрос будет вида SELECT * FROM ... WHERE MATCH (...) AGAINST (...) AND city='1' AND ... AND... ;
И здесь http://www.yiiframework.com/doc/api/1.1/CDbCriteria подобной конструкции MATCH (...) AGAINST (...) не нашел
И здесь http://www.yiiframework.com/doc/api/1.1/CDbCriteria подобной конструкции MATCH (...) AGAINST (...) не нашел
Re: Организация поиска по сайту
Мне кажется с запросом такой сложности нужно не CDbCriteria использовать. Либо расширить его можно.
Re: Организация поиска по сайту
Я тоже так думаю , собственно вопрос поэтому и возник...anton44eg писал(а):Мне кажется с запросом такой сложности нужно не CDbCriteria использовать.
Re: Организация поиска по сайту
Перебрал все возможные сочетания получилось ~50 if -ов. Неужели нет другого способа?
Re: Организация поиска по сайту
немного не понял, 50 ифов условий выборок? там же вроде про "квартиры" меньше было, нет? CDBCommandBuilder может помочь тоже в некотором смысле, когда будешь подцеплять запросы в зависимости от условий.eche писал(а):Перебрал все возможные сочетания получилось ~50 if -ов. Неужели нет другого способа?
Re: Организация поиска по сайту
ага более 50 условий. 6 полей в форме вот и получается столько возможных сочетаний и яя не уверен что учел все возможные сочетания. CDBCommandBuilder а вот это кажется то, что нужно, сейчас проверю