- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
в данный момент sphinx нормально ищет по полям(назовем их просто)
name - название товара
text - описание товара
предположим в базе есть 2 абсолютно одинаковых товара(название/описание ), но с разной ценой
задача такая:
необходимо выводить товары по релевантности (как и было), но если 2 товара абсолютно одинаковые(но с разной ценой), то сначала первым должен идти товар с меньшей ценой и т.д.
необходимо выводить товары по релевантности (как и было), но если 2 товара абсолютно одинаковые(но с разной ценой), то сначала первым должен идти товар с меньшей ценой и т.д.
Вместо SPH_SORT_RELEVANCE укажите нужный параметр вторым после "веса".
http://sphinxsearch.com/docs/manual-0.9.9.html#sorting-modes
$sphinx = new SphinxClient();
// Подсоединяемся к Sphinx-серверу
$sphinx->SetServer('192.168.0.1', 9312);
$sphinx->SetFieldWeights(array('price'=>100,'name' => 10, 'opisanie' => 1));
// Совпадение по любому слову
$sphinx->SetMatchMode(SPH_MATCH_ANY);
$sphinx->SetLimits(0,10);
$sphinx->SetSortMode("@weight DESC, @price ASC");
$result = $sphinx->Query($string, 'myindex');
print_r($result); выдает одно и тоже и при "@weight DESC, @price ASC" и при "@weight DESC, @price DESC"
А @weight точно одинаковый?
Если без него? @price ASC и @price DESC?
$sphinx->SetSortMode("@price DESC");
$sphinx->SetSortMode("@price ASC");
результат один
---------- Добавлено 21.02.2013 в 23:01 ----------
если посмотреть print_r($result);
Array ( [error] => [warning] => [status] => 0 [fields] => Array ( [0] => name [1] => opisanie ) [attrs] => Array ( [price] => 1 ) [matches] => Array ( [37343902] => Array ( [weight] => 7 [attrs] => Array ( [price] => 322 ) ) [37343962] => Array ( [weight] => 7 [attrs] => Array ( [price] => 192 ) ) [37344050] => Array ( [weight] => 7 [attrs] => Array ( [price] => 1009 ) ) [37344628] => Array ( [weight] => 7 [attrs] => Array ( [price] => 1299 ) ) [37344810] => Array ( [weight] => 7 [attrs] => Array ( [price] => 1019 ) ) [37344956] => Array ( [weight] => 7 [attrs] => Array ( [price] => 818 ) ) [37343940] => Array ( [weight] => 3 [attrs] => Array ( [price] => 1248 ) ) [37344229] => Array ( [weight] => 3 [attrs] => Array ( [price] => 548 ) ) [37344627] => Array ( [weight] => 3 [attrs] => Array ( [price] => 1477 ) ) [37344646] => Array ( [weight] => 3 [attrs] => Array ( [price] => 1439 ) ) ) [total] => 648 [total_found] => 648 [time] => 0.000 [words] => Array ( [video] => Array ( [docs] => 66 [hits] => 102 ) [mp3] => Array ( [docs] => 638 [hits] => 860 ) ) )
как видите weight - от 7 до 3
price тоже разный
например записи 37344628 и 37343962 абсолютно одинаковы
но если менять сортировку от большего к меньшему или от меньшего к большему
они будут отображаться одинаково не взирая на указания как сортировать
$sphinx->SetSortMode("@price DESC"); или $sphinx->SetSortMode("@price ASC");
---------- Добавлено 21.02.2013 в 23:32 ----------
наверно можно конечно загнать результ в mysql
и сортиронуть по weight и потом price
но хотелось бы чтоб sphinx сразу выдал то что надо
Первый параметр - константа (без кавычек)
И да.. с собакой @ только встроенные атрибуты.. price - без амперсанда
вот так $sphinx->SetSortMode("@weight DESC ,price ASC");
выдает, но сортировку не делает как надо
так $sphinx->SetSortMode(SPH_SORT_EXTENDED ,"@weight DESC ,price ASC");
вообще пустота тобишь print_r($result); вообще НИЧЕ не выдает
---------- Добавлено 22.02.2013 в 09:22 ----------
щас использую временное решение
$result = $sphinx->Query($string, 'myindex');
$ids = array_keys($result['matches']);
for ($qq=0;$qq<=count($ids)-1;$qq++)
{
$dataprod[]=array('id'=>$ids[$qq],'weight'=>$result['matches'][$ids[$qq]]['weight'],'price'=>$result['matches'][$ids[$qq]]['attrs']['price']);
}
foreach ($dataprod as $key => $row) {
$id[$key] = $row['id'];
$price[$key] = $row['price'];
$weight[$key] = $row['weight'];
}
array_multisort($weight, SORT_DESC,$price, SORT_DESC,$dataprod);
никак не получается заставить sphinx сортировать
вообще пустота тобишь print_r($result); вообще НИЧЕ не выдает
Смотрите ошибку в логе.. Делайте частями пошагово.. "Заставьте" работать SPH_SORT_EXTENDED сначала с дефолтной сортировкой, без цены...
И да.. версия сфинкса какая? и PHP-клиента?
что-то сделал и заработало
буду копать в чем было дело
---------- Добавлено 22.02.2013 в 12:58 ----------
щас код такой
$sphinx = new SphinxClient();
$sphinx->SetServer('192.168.0.1', 9312);
$sphinx->SetMatchMode(SPH_MATCH_ANY);
$sphinx->SetSortMode (SPH_SORT_EXTENDED, "@weight desc, price desc");
$result = $sphinx->Query($string, 'myindex');
---------- Добавлено 22.02.2013 в 13:13 ----------
вообщем пока не разобрался в чем было дело
если пойму - отпишу
ivan-lev примного благодарен за советы