有一种方法可以避免在Sphinx中搜索时,由于两个索引(主索引和增量索引)中的ID重复,结果重复了吗?我知道我可以通过运行两个索引的合并来解决此问题,但是我想知道是否还有另一种避免合并的方法,因为服务器每次运行它的成本都很高。
答案 0 :(得分:1)
1)只需一次对两个索引运行查询,方法是将两个索引作为本地或代理进行分布式索引,或者仅在搜索查询中使用逗号,例如:
mysql> select * from idx_min;
+------+--------------------------------------------------------------+------+
| id | doc | a |
+------+--------------------------------------------------------------+------+
| 1 | dog cat parrot juice apple mandarine juice juice apple juice | 123 |
| 2 | dog cat juice apple apple juice | 123 |
+------+--------------------------------------------------------------+------+
2 rows in set (0.01 sec)
mysql> select * from idx_min2;
+------+--------------------------------------------------------------+------+
| id | doc | a |
+------+--------------------------------------------------------------+------+
| 1 | dog cat parrot juice apple mandarine juice juice apple juice | 123 |
| 2 | dog cat juice apple apple juice | 123 |
+------+--------------------------------------------------------------+------+
2 rows in set (0.00 sec)
即我们可以看到两个索引都具有ID为1和2的文档。但是:
mysql> select * from idx_min, idx_min2;
+------+--------------------------------------------------------------+------+
| id | doc | a |
+------+--------------------------------------------------------------+------+
| 1 | dog cat parrot juice apple mandarine juice juice apple juice | 123 |
| 2 | dog cat juice apple apple juice | 123 |
+------+--------------------------------------------------------------+------+
2 rows in set (0.00 sec)
为我们提供了删除了重复项的文档。
2)要使重复数据删除方式的控制更加严格,可以使用终止列表。 Kill-list是分配给索引的ID列表,该ID表示应该从任何先前的索引中删除这些ID。根据您所使用的版本(Sphinx 2 / Manticore / Sphinx 3),这些命令用于定义kill-list,其行为可能会有所不同。