Как удалить удаленные записи из основного индекса сфинкса? - PullRequest
3 голосов
/ 11 октября 2010

У меня есть сайт, который использует схему индексации main / delta для sphinx.главная перестраивается ежедневно, дельта перестраивается каждые 5 минут.Это хорошо работает для индексации вновь представленных элементов.

Проблема в том, что элементы необходимо удалять из индекса так же часто, как они добавляются, и обычно отбрасываемые элементы старше, поэтому они уже находятся в основном индексе.Таким образом, после удаления элемента они по-прежнему отображаются в результатах поиска на срок до 24 часов (до 1 часа ночи, когда будет восстановлен основной).

Как я могу решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 08 апреля 2012

См. Документацию для sql_query_killlist http://sphinxsearch.com/docs/current.html#conf-sql-query-killlist

В двух словах вам нужно следующее в дельта-индексе:

sql_query_killlist = select id from mytable where updated > @last_delta_update
0 голосов
/ 04 октября 2011

Один из вариантов - определить атрибут в индексе, а затем изменить его значение, чтобы «игнорировать» определенные документы.Например, мои индексы имеют атрибут flag_ignore.Все поиски фильтруются, поэтому сопоставляются только те документы, у которых flag_ignore = 0.Когда документ должен исчезнуть прямо сейчас из индекса, я вызываю Sphinx-> UpdateAttributes () и устанавливаю значение 1, что приведет к исчезновению документа из любого следующего поиска.

0 голосов
/ 11 октября 2010

Sphinx недавно представил функцию индексов в реальном времени, где вы можете добавлять, обновлять и удалять индексы на лету. Тем не менее, он доступен только в 1.10, и все еще кажется довольно сырым.

http://www.sphinxsearch.com/docs/current.html#rt-indexes

В качестве альтернативы, вы можете чаще выполнять повторную индексацию. Каждые 24 часа кажутся длинными, если у вас много удалений. В качестве последней попытки вы всегда можете проверить в своем приложении, что возвращаемые идентификаторы действительно все еще существуют, а затем отфильтровать их.

...