Проблема в реализации 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:
Атрибуты, в отличие от полей, не являются полнотекстовыми индексами. Они хранятся в индексе, но их невозможно найти в виде полнотекстового текста, и попытка сделать это приводит к ошибке.