开发者

Sphinx deleted documents

I have this problem for a long time, and can't find a solution. I guess this might be something everybodys faced using 开发者_JAVA技巧Sphinx, but I cnanot get any usefull information.

I have one index, and a delta. I queried in a php module both indexes, and then show the results. For each ID in the result, I create an object for the model, and dsiplay main data for that model.

I delete one document from the database, phisically.

When I query the index, the ID for this deleted document is still there (in the sphinx result set). Maybe I can detect this by code, and avoid showing it, but the result set sphinx gaves me as result is wrong. xxx total_found, when really is xxx-1. For example, Sphinx gaves me the first 20 results, but one of this 20 results doesn't exists anymore, so I have to show only 19 results.

I re-index the main index once per day, and the delta index, each 5 minutes.

Is there a solution for this??

Thanks in advance!!


What I've done in my Ruby Sphinx adapter, Thinking Sphinx, is to track when records are deleted, and update a boolean attribute for the records in the main index (I call it sphinx_deleted). Then, whenever I search, I filter on values where sphinx_deleted is 0. In the sql_query configuration, I have the explicit attribute as follows:

SELECT fields, more_fields, 0 as sphinx_deleted FROM table

And of course there's the attribute definition as well.

sql_attr_bool = sphinx_deleted

Keep in mind that these updates to attributes (using the Sphinx API) are only stored in memory - the underlying index files aren't changed, so if you restart Sphinx, you'll lose this knowledge, unless you do a full index as well.

This is a bit of work, but it will ensure your result count and pagination will work neatly.


Maybe this fits better to my needs, but involves changing the database.

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


I suppose you could ask for maybe 25 results from sphinx and then when you get the full data from your DB just have a limit 20 on the query.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜