Проблема сфинкса. Фильтр

У меня проблема со сфинксом. У меня такая конфигурация:

sql_query               = \
        SELECT id, product_title, product_inf, product_code, ptype_name, title, cat, value, car \
        FROM Catalog_View;
sql_attr_uint           = car
sql_attr_uint           = cat

Catalog_View - это представление, которое собирает данные из нескольких таблиц. Он работает хорошо, и у него нет никаких проблем. Я создал индекс с такой конфигурацией:

index src1
{
    source          = src1
    path            = /var/data/src1
    docinfo         = extern
    mlock           = 0
    morphology      = stem_en, stem_ru
    min_word_len        = 3
    charset_type        = sbcs
    min_prefix_len  = 0
    min_infix_len       = 3
    enable_star     = 1
}

И индексатор отлично справился со своей задачей. Но когда я ищу пустой запрос (например, этот '') и устанавливаю два фильтра

$cl->SetFilter('cat',array(9));
$cl->SetFilter('car',array(2));

Я проигрываю много матчей. Например, когда я использую SQL-запрос к Catalog_View, у меня есть 76 строк, а в Sphinx то же самое дает мне только 11 строк. Я не могу понять, что делаю не так. Вроде все нормально, кроме фильтра. На самом деле у меня такая же проблема с фильтрами, когда я ищу непустой запрос.


person Anton    schedule 17.06.2011    source источник
comment
Используете ли вы в своем запросе И или ИЛИ для выбора этих двух столбцов?   -  person datasage    schedule 17.06.2011
comment
я не понимаю, о чем вы говорите ... мой запрос - это пустая строка ('') или несколько слов (например, "продажа машины")   -  person Anton    schedule 17.06.2011
comment
Вы сказали, что выполнили SQL-запрос и получили больше результатов. У меня вопрос: использовали ли вы И или ИЛИ в столбцах с кошками и автомобилями? Фильтры Sphinx объединяются вместе, но вы можете выполнить или через сам запрос.   -  person datasage    schedule 17.06.2011
comment
Я понял. Нет, я использовал что-то вроде этого SELECT * FROM Catalog_View WHERE cat = 9 AND car = 2   -  person Anton    schedule 17.06.2011
comment
Пожалуйста, дайте некоторую статистику: сколько документов в индексе? Сколько просмотров вы получите с search -f cat 9 и search -f car 2 соответственно? Каковы ваши max_matches настройки?   -  person    schedule 17.06.2011
comment
В индексе 25000 документов. 1536 - для вагона 2; 519 - для кошки 9;   -  person Anton    schedule 17.06.2011
comment
при перехвате 1536 и 519 мне нужно 76, а всего 11.   -  person Anton    schedule 17.06.2011
comment
Я подумал, что, возможно, у вас заканчиваются буферы в первом фильтре, и остается только 11 документов, соответствующих второму фильтру. Но дело не в этом. Если не считать исходный код searchd, лучше всего попробовать другую версию. Возможно, это исправленная ошибка.   -  person    schedule 18.06.2011
comment
А вы спрашивали на форуме Sphinx?   -  person    schedule 18.06.2011
comment
Приветствую, Антон, я думаю, вам следует увеличить max_matches, поскольку я думаю, что он может прекратить поиск соответствующих записей после обработки 10000 записей   -  person Imran Omar Bukhsh    schedule 24.08.2011


Ответы (1)


Я тоже наткнулся на это. Мое решение заключалось в том, чтобы сделать идентификаторы документов уникальными. Если у вас дублируются идентификаторы документов, возможный результат может быть таким же. Я предполагаю, что Sphinx возьмет только первый уникальный документ, перебивая все дублированные данные.

person kworr    schedule 31.05.2012