Sphinx - 搜索时出现重复结果
Sphinx - Duplicated results when searching
有一种方法可以避免在 Sphinx 中搜索时出现 ID 重复的结果,因为它们在两个索引(主索引和增量索引)中?我知道我可以解决这个 运行 合并两个索引的问题,但我想知道是否有另一种方法可以避免合并,因为服务器 运行 每次合并都可能很昂贵。
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-lists。 Kill-list 是分配给索引的 ID 列表,表示应从任何前面的索引中删除这些 ID。根据您使用的版本(Sphinx 2 / Manticore / Sphinx 3),定义杀戮列表的命令和行为可能会有所不同。
有一种方法可以避免在 Sphinx 中搜索时出现 ID 重复的结果,因为它们在两个索引(主索引和增量索引)中?我知道我可以解决这个 运行 合并两个索引的问题,但我想知道是否有另一种方法可以避免合并,因为服务器 运行 每次合并都可能很昂贵。
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-lists。 Kill-list 是分配给索引的 ID 列表,表示应从任何前面的索引中删除这些 ID。根据您使用的版本(Sphinx 2 / Manticore / Sphinx 3),定义杀戮列表的命令和行为可能会有所不同。