Sphinx-搜索时重复的结果

时间:2018-11-02 10:47:32

标签: php full-text-search sphinx

有一种方法可以避免在Sphinx中搜索时,由于两个索引(主索引和增量索引)中的ID重复,结果重复了吗?我知道我可以通过运行两个索引的合并来解决此问题,但是我想知道是否还有另一种避免合并的方法,因为服务器每次运行它的成本都很高。

1 个答案:

答案 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,其行为可能会有所不同。