Проблема в реализации Sphinx API вместе с Cake php - PullRequest
11 голосов
/ 23 мая 2011

Я работаю над проектом, в котором мне нужно реализовать SphinxSearch с Cake php. Поэтому я просто пытаюсь использовать компонент и поведение в нем. Ссылка на него, это: -

http://bakery.cakephp.org/articles/eugenioclrc/2010/07/10/sphinx-component-and-behavior

Я запрашиваю Sphinx API, как показано ниже:

$sphinx = array('matchMode' => SPH_MATCH_ALL, 'sortMode' => array(SPH_SORT_EXTENDED => '@relevance DESC'));

$results = $this->ModelName->find('all', array('search' => 'Search_Query', 'sphinx' => $sphinx));

pr($result);

Выше это работает нормально, но когда я попытался минимизировать время ответа на запрос к определенному полю таблицы (используя расширенные режимы сопоставления, т.е. SPH_MATCH_EXTENDED2), Sphinx просто не может вывести какой-либо результат. Расширенный запрос, который я использовал, приведен ниже: -

$sphinx = array('matchMode' => SPH_MATCH_EXTENDED2, 'sortMode' => array(SPH_SORT_EXTENDED => '@relevance DESC'));

$results = $this->ModelName->find('all', array('search' => '@Field_name Search_Query', 'sphinx' => $sphinx));

pr($results);

Может кто-нибудь распознать, где я ошибаюсь? Пожалуйста, помогите, если я ошибаюсь где-то.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 августа 2014

Как вы сказали,

Sphinx просто не может вывести никакого результата.

Это означает, что это ошибка:

Пожалуйста, проверьте, добавили ли вы конкретное поле в индекс, используя sql_query

Также проверьте, если поле вы ищетеfor не является атрибутом
Согласно документации sphinx:

Атрибуты, в отличие от полей, не полнотекстовые индексированные.Они хранятся в индексе, но невозможно найти их как полнотекстовые, и попытка сделать это приводит к ошибке.

1 голос
/ 24 мая 2011

Кстати, когда вы используете режим EXTENDED2, убедитесь, что ваш режим rank установлен соответственно.

Редактировать

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

Компонентный

if(!isset($query['search'])){ 
  $result = self::$sphinx->Query('', $indexes);     
} else { 
  $result = self::$sphinx->Query($query['search'], $indexes); 
}

if ($result === false) {
  // throw new SphinxException();
  die(self::$sphinx->GetLastError());
}
$warn = self::$sphinx->GetLastWarning();
if ($warn) echo $warn;

Поведение

$result=$this->runtime[$model->alias]['sphinx']->search($s);
if ($result === false) {
  die($this->runtime[$model->alias]['sphinx']->GetLastError());
}
$warn = $this->runtime[$model->alias]['sphinx']->GetLastWarning();
if ($warn) echo $warn;

Надеюсь, это поможет.

...