1

メイン インデックスsql_query_killlistを機能させようとしていますが、何をしても削除されたドキュメントがSphinxQL の結果として表示されます。私のスフィンクスのバージョンは2.0.4です。

sphinx.confファイルの一部:

source torrents
{
    type        = mysql

    sql_host        = localhost
    sql_user        = torrents
    sql_pass        = torrents
    sql_db      = torrents
    sql_port        = 3306
    sql_sock        = /var/run/mysqld/mysqld.sock

    sql_query_range     = SELECT MIN(id), MAX(id) FROM torrents
    sql_range_step      = 1000
    sql_query           = \
                            SELECT torrents.id, torrents.id, text_data.torrent, language_id, category, title, words, HEX(torrents.code) as code, sum(trackers_torrents.seeds) as seeds, sum(trackers_torrents.peers) as peers, size, creation_date, rating FROM `text_data` \
                            LEFT JOIN `torrents` ON torrents.id = text_data.torrent \
                            LEFT JOIN `trackers_torrents` ON trackers_torrents.torrent = torrents.id \                            
                            WHERE text_data.torrent >= $start AND text_data.torrent <= $end \
                            AND `trackers_torrents`.status = 'ok' AND `torrents`.is_stopword = 0 \
                            GROUP BY text_data.torrent \
                            ORDER BY text_data.torrent ASC \

    sql_attr_uint   = torrent
    sql_attr_uint       = language_id
    sql_attr_string     = title
    sql_field_string    = words
    sql_attr_string = code
    sql_attr_uint       = seeds
    sql_attr_uint       = peers
    sql_attr_uint   = category
    sql_attr_bigint     = size
    sql_attr_bigint = creation_date
    sql_attr_uint   = rating

    sql_query_pre   = SET NAMES utf8
    sql_query_pre   = SET SESSION query_cache_type=OFF

    sql_query_killlist  = SELECT torrent_id FROM stopwords_torrents
}

これが重要な行です。

sql_query_killlist  = SELECT torrent_id FROM stopwords_torrents

私のstopwords_torrentsテーブルは次のようになります。

mysql> select * from stopwords_torrents;
+----+------------+
| id | torrent_id |
+----+------------+
|  2 |      14115 |
+----+------------+
1 row in set (0.00 sec)

SphinxQLに入ると

mysql -h 0 -P 9306

これを入力すると、まだ削除されたドキュメントが表示されます。これはなぜですか?

mysql> select id, torrent, code from all_torrents WHERE id = 14115;
+-------+--------+---------+------------------------------------------+-------+
| id    | weight | torrent | code                                     | id    |
+-------+--------+---------+------------------------------------------+-------+
| 14115 |      1 |   14115 | 4956A4E976EA948025C3C3554567CA2820F65F64 | 14115 |
+-------+--------+---------+------------------------------------------+-------+
1 row in set (0.00 sec)
4

1 に答える 1

2

インデックスの kill リストは、PREVIOUS インデックスからドキュメントを削除します。現在のインデックスではありません。

複数のインデックスを照会する場合に使用します。1 つのインデックスを検索する場合は効果がありません。

結果からドキュメントを削除する場合は、変更sql_queryして直接除外します。

于 2014-04-22T15:10:12.683 に答える