Проблема в реализации API Sphinx вместе с Cake php

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

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

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

$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);

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

Спасибо заранее.

Ответ 1

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

Edit:

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

Компонент

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;

Я надеюсь, что это поможет.

Ответ 2

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

Sphinx просто не дает результата.

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

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

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

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