Сфинкс удалил документы - PullRequest
1 голос
/ 17 декабря 2009

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

У меня есть один индекс и дельта. Я запросил в модуле php оба индекса, а затем показал результаты. Для каждого идентификатора в результате я создаю объект для модели и основные данные dsiplay для эта модель.

Я удаляю один документ из базы данных, физически.

Когда я запрашиваю индекс, идентификатор для этого удаленного документа все еще там (в sphinx набор результатов). Может быть, я могу определить это по коду и не показывать его, но набор результатов sphinx дает мне как результат неверно. ххх total_found, когда на самом деле ххх-1. Например, Сфинкс дает мне первые 20 результатов, но один из этих 20 результатов не существует больше, поэтому я должен показать только 19 результатов.

Я переиндексирую основной индекс один раз в день и дельта-индекс каждые 5 минут.

Есть ли решение для этого ??

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

Ответы [ 3 ]

1 голос
/ 17 декабря 2009

Может быть, это лучше подходит для моих нужд, но требует изменения базы данных.

http://sphinxsearch.com/docs/current.html#conf-sql-query-killlist

1 голос
/ 19 декабря 2009

То, что я сделал в своем адаптере Ruby Sphinx, Thinking Sphinx, состоит в том, чтобы отслеживать, когда записи удаляются, и обновлять логический атрибут для записей в главном индексе (я называю это sphinx_deleted). Затем, всякий раз, когда я ищу, я фильтрую значения, где sphinx_deleted равно 0. В конфигурации sql_query у меня есть явный атрибут следующим образом:

SELECT fields, more_fields, 0 as sphinx_deleted FROM table

И, конечно, также есть определение атрибута.

sql_attr_bool = sphinx_deleted

Имейте в виду, что эти обновления атрибутов (с использованием Sphinx API) хранятся только в памяти - базовые индексные файлы не изменяются, поэтому, если вы перезапустите Sphinx, вы потеряете эти знания, если не выполните полное индекс также.

Это небольшая работа, но она обеспечит аккуратный подсчет результатов и нумерацию страниц.

0 голосов
/ 17 декабря 2009

Полагаю, вы могли бы запросить, возможно, 25 результатов у sphinx, а затем, когда вы получите полные данные из вашей БД, просто укажите в запросе limit 20.

...