ФорумСообществоФлейм → опять вопрос по sphinx

опять вопрос по sphinx

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 2:26

    Ты через API работаешь? Тогда покажи как ты с ним работаешь
    adw/0
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 6 августа 2009 г. 3:32, спустя 1 час 5 минут 54 секунды

    да, через api php, вот:

    function search($search)
    {
    $this->load->library('sphinx');

    $this->sphinx->SetServer('localhost', 3312);
    $this->sphinx->SetArrayResult(TRUE);
    $this->sphinx->SetMatchMode(SPH_MATCH_ANY);
    $this->sphinx->SetSortMode(SPH_SORT_RELEVANCE);

    $result = $this->sphinx->Query($search, 'articles');

    return $result;
    }


    Использую как функцию модели в codeigniter. Этот же код работает на winxp.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 4:08, спустя 35 минут 50 секунд

    в результатах выводиться 1 вместо массива.
    Выводится число "1" или один результат?
    adw/0
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 6 августа 2009 г. 4:17, спустя 9 минут 14 секунд

    true наверно возвращает $this->sphinx->Query($search, 'articles');
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 4:25, спустя 7 минут 19 секунд

    Сделай еще так:

    function search($search)
    {
    var_dump($search);


    Передается ли "искомое слово" вообще?
    adw/0
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 6 августа 2009 г. 4:58, спустя 33 минуты 54 секунды


    в результатах выводиться 1 вместо массива.
    Выводится число "1" или один результат?

    выводилось число 1. Видимо это было true. Сейчас выводиться bool(false). Вообще не понимаю почему, я ничего не менял.
    Искомое слово передается, вот пример:
    string(4) "sony"


    Я вот думаю, если бы все было нормально то оно бы записывало бы в лог запросы. Но query.log пустой… что бы это значило?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 5:16, спустя 17 минут 41 секунду

    Попробуй вместо
    $this->load->library('sphinx');


    Сделать


    require_once ("sphinxapi.php");
    $this->sphinx = new SphinxClient();
    Спустя 25 сек.
    Для теста, выясним в чем трабл
    adw/0
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 6 августа 2009 г. 5:17, спустя 55 секунд

    хехе, а там же есть функция GetLastError();
    она выдает:

    searchd error: per-query max_matches=1000 out of bounds (per-server max_matches=200)

  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 6 августа 2009 г. 5:29, спустя 12 минут 21 секунду

    хух пля, разобрался слава господу!
    оказывается я в конфиге поменял max_maches=200, а было 1000. Поменял назад на 1000. Опять какая-то ошибка была с индексами. Переиндексировал, заработало!

    Я понял что нужно использовать GetLastError(); всегда подскажет где копать

    adw0rd, с загрузкой библиотеки видимо все нормально, спасибо что пытался помочь)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 5:40, спустя 10 минут 32 секунды

    searchd error: per-query max_matches=1000 out of bounds (per-server max_matches=200)
    у меня была такая трабла, только вот search мне о ней и сказал, странно что ты не увидел эту ошибку когда юзал его
    Спустя 99 сек.
    Я понял что нужно использовать GetLastError(); всегда подскажет где копать
    да, но только когда юзаешь API
    А так, если юзаешь SphinxSE, то mysql_error() в помощь
    adw/0
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 6 августа 2009 г. 12:55, спустя 7 часов 15 минут 3 секунды

    У меня еще вопрос: а почему оно релевантность непраильно считает?
    Вот я например выставил ее так:

    $this->sphinx->SetFieldWeights(array ('title' => 20, 'key_words' => 15, 'text' => 10));

    Тоесть получается, что если найдет в одной статье (например) совпадение в поле 'title', а в другой статье в поле 'key_words', то должно в результатах первой вывести первую статью. А у меня наоборот. С чем это может быть связано?

    Вот так настраиваю перед поиском:

    $this->sphinx->SetArrayResult(TRUE);
    $this->sphinx->SetMatchMode(SPH_MATCH_ANY);
    $this->sphinx->SetSortMode(SPH_SORT_RELEVANCE);
    $this->sphinx->SetFieldWeights(array ('title' => 20, 'key_words' => 15, 'text' => 10));

    $result = $this->sphinx->Query($search, 'articles');
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 13:01, спустя 6 минут 23 секунды

    smackthat, в sphinxse я наоборот ставлю "1,2,3" то есть 1 для титла, 2 для содержимого, 3 для тегов
    adw/0
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 6 августа 2009 г. 13:10, спустя 8 минут 34 секунды

    а почему? в доках же написано что указывается вес. Тоесть получается, что чем больше вес, тем больше важность этого поля. Или ты выставляешь самыми важными теги?

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 6 августа 2009 г. 13:13, спустя 2 минуты 43 секунды

    smackthat, нет, я для самых важных ставлю 1, далее для менее важных 2 и т.д.
    Это в SphinxSE
    Спустя 74 сек.

    `query` = 'запрос;index=pyha_forum,pyha_forum_delta;weights=1,2,3;limit=1000
    adw/0
  • smackthat

    Сообщения: 464 Репутация: N Группа: Адекваты

    Spritz 6 августа 2009 г. 13:14, спустя 1 минуту 51 секунду

    блин я тут тестирую, такое впечатление что сортировка по релевантности вообще не работает. Иногда на первом месте выводит результат в котором одно совпадение в text-e (хотя самый малый вес), а уже потом идут результаты с совпадениями в title и key_words.

    А иногда все наоборот.

    Что-то странно как-то…

Пожалуйста, авторизуйтесь, чтобы написать комментарий!