Pull to refresh
16
0
Михаил Старовойт @mstarrr

User

Send message
Приветствую коллег из России. Анализировал ваши решения, есть очень много интересных идей.

Мы начали свою деятельность в Украине с проекта Partamster, тоже пиарился на хабре, писал статью про сфинкс. Проект тот загибается, но наш продукт, выросший из него жив и здравствует.

Вопрос: не поделитесь базой кросов? Хуже от этого никому не станет, а у нас в Украине появится в магазинах актуальная информация.
Надо тестить: при разном кол-ве данных и разных запросах. так в лоб и не ответишь.
Надо тестить: при разном кол-ве данных и разных запросах. так в лоб и не ответишь.
Подойдет, по-моему лучшего решения и не придумаешь.
Это все дело в настройках. У гуггл конечно все намного круче чем на хабре.
Конструктивная и не очень критика — приветствуется очень. Надеюсь на помощь ИТ сообщества!
Долго не мог понять, почему у меня не обновляется интерфейс: сегодня случайно понял, почему. Оказалось, что поверх ссылки ан обновление интерфейса в правом нижнем углу у меня «Задания» светятся и я просто не видел этой ссылки.
да, причем «масла Castrol 5W40» находит * Масла моторные (6)
autoklad.biz/?action=search&search[query]=%D0%BC%D0%B0%D1%81%D0%BB%D0%B0%20Castrol%205W40&search[id_price_group]=35

эта часть не должна была изменится. Можете привести урл или скриншот, где ничего не нашлось по этому азпросу?
Вся проблема в том, что куча скрытых не очевидных вещей — и чтобы о них узнать, нужно разобраться, проверить, погонять на тестах с живыми данными, а не семпловыми 2-3мя табличками с 3-5ю записями для сфинкса. Не уверен, но такие вещи называют «Best practices». То есть список типовых проблем — и такой же список наиболее коротких и правильных путей решения, чтобы каждый не ломал голову над своим велосипедом.

Я столкнулся с тем, что в сфинксе очень много функционала: он работает, бесспорно. Но не все так очевидно и явно, как хотелось бы. А почитать на русском толком кроме 2-3х статей для новичков -нечего. Основная масса информации черпалась по сути из комментариев к статьям на хабре, форуме на сайте и других сайтах таких же девелоперов. Я читаю и пишу на английском, но когда речь заходит о вещах которые не очевидны и не понятны — тяжело вникнуть в суть, даже если 80-90% слов в тексте понятны.

Для меня ступором было, что нету «service sphinx reload», «include *.conf», что ошибки при запуске не пишутся в текстовый лог — чтобы это понять я потратил кучу времени до того, как понял что именно нужно решать и как.

Я специально в статье перечислил все подобные свои грабли, как я их попытался решить, что у меня получилось и к каким выводам пришел. Надеюсь, следующему разработчику уже не нужно будет решать хотя бы эти грабли.
да, я уточнил свой вопрос чуть ниже.
>обратите внимание на колонку с фильтрами
Упустил я эту колонку из виду. Скажите, а как решаете проблему с возвратами по неправильному подбору. То есть если все параметры заданы правильно, а к примеру для запчасти не учтен к примеру параметр «Страна назначения авто» или «Праворукость» — как-то контролируется подбор и проверка запчасти по вин или все заказы идут как на мобильники?
bq. Проблема в том, что в п. 4 нам нужно ОБНУЛИТЬ установленные для предыдущего запроса setFilter() setGroupBy() и т.п., потому что они при addQuery() не обнуляются.

Есть же ResetFilters() и ResetGroupBy() для обнуления, а по-умолчанию они и не должны обнуляться — я написал в статье о них. Или может я что-то пропустил и все такие есть какие грабли с мультизапросами?

По вашему примеру сайта: найдено 767 results — честно говоря, я когда себе фару буду искать, врятли меня устроит такой широкий выбор :) Для фар, бамперов, и других 90% запчастей машины поиск сфинкс не подходит — и об этом тоже написано в статье. Или вы считаете что ваш поиск по фарам востребован пользователями?
Вы ничего не сломали, просто создали такой запрос, по которому ничего не найдено.

Аналогично по более простому «корола» autoklad.biz/?search%5Bquery%5D=%D0%BA%D0%BE%D1%80%D0%BE%D0%BB%D0%B0&action=search
ничего не найдено.

Я в статье писал, что не работают еще синонимы и запчасти привязаны только те, которые имеет смысл искать через поиск. Бампера к таким запчастям не очень подходят — для бамперов лучше через вин искать.
>Так что в комментариях приветствуется более корректный пример запроса для получения того же, но средствами сфинкс группировки.

Группированный велосипед через мультизапросы исправил более корректной логикой сфинкса, пример использования ниже. Фактически используется функция из апи:
$oSphinxClient->SetGroupBy("id_price_group", SPH_GROUPBY_ATTR, "@count desc" );

и нужный результат берется из $aResult[matches][attrs][@count]

Исходник на сервере обновил, вывод результата на первом шаге также добавил

Добавлен новый метод, который использует тот же шаблон, но вместо 100 запросов (кол-во груп запчастей) шлет сфинксу один.
public function AllPriceGrouped()
{
	if ($this->sQuery) {

		require(SERVER_PATH.'/lib/sphinx/sphinxapi.php');
		$sSphinxKeyword=$this->GetSphinxKeyword($this->sQuery);

		$oSphinxClient = new SphinxClient();
		$this->SetDefaultSetting($oSphinxClient);

		$oSphinxClient->SetGroupBy("id_price_group", SPH_GROUPBY_ATTR, "@count desc" );
		$aResult = $oSphinxClient->Query($sSphinxKeyword, 'price_group');
		Base::$sText.=$sSphinxKeyword."
";

		if ( $aResult === false ) {
			Base::$sText.="Query failed: ".$oSphinxClient->GetLastError()."
";
		}
		else {
			if ($oSphinxClient->GetLastWarning() ) {
				Base::$sText.="WARNING: ".$oSphinxClient->GetLastWarning()."
";
			}
			if ($aResult['matches']) {
				$sPriceGroupAssoc=Db::GetAssoc('Assoc/PriceGroup',array(
				'visible'=>1,
				'multiple'=>1,
				));
				foreach ($aResult['matches'] as $aValue){
					$PriceGroupRow=$sPriceGroupAssoc[$aValue['attrs']['id_price_group']];

					if ($PriceGroupRow) {
						$PriceGroupRow['total_found']=$aValue['attrs']['@count'];
						$PriceGroupRow['price_group']=$PriceGroupRow;
						$PriceGroupRow['price_group']['id']=$aValue['attrs']['id_price_group'];
						$aResultPriceGroup[]=$PriceGroupRow;
					}
				}

				Base::$tpl->assign('aResultPriceGroup',$aResultPriceGroup);
				Base::$sText.=Base::$tpl->fetch($this->sPrefix.'/all_price_group.tpl');
			}
			Base::$sText.=Debug::PrintPre($aResult,false,true);
		}
	}
}
Ругается сфинкс indexer:
ERROR: index 'price_group': infixes and morphology are enabled, enable_star=0

не дает создать такой индекс
У меня почему-то аналогичный опыт отложился в памяти, что FORCE INDEX корректно работает для прямых запросов, а для представлений глючит.

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

Может кто-то имеет более точную информацию по текущему положению дел?
Важный момент для windows пользователей: при отказе запуска службы — ошибку нужно искать не в логах сфинкса, а в Панель управления — Администрирование — Просмотр событий.
Да, веса настраиваются для запросов, а не зашиты статично в настройках сфинкса. То есть можно к одному индексу документов делать несколько разных запросов, в зависимости к примеру от настроек в профайле каждого пользователя или от пришедших гет параметров формы.

К примеру, кто то хочет по коду важному искать, а кому-то нужно именно описание запчасти.
А как вообще сам поиск и изложенный материал: не сильно рябит откровенными ляпами, характерными для новичка в поиске?

Information

Rating
Does not participate
Location
Чернигов, Черниговская обл., Украина
Date of birth
Registered
Activity