Сфинкс - Дублированные результаты при поиске - PullRequest
0 голосов
/ 02 ноября 2018

Есть способ избежать того, что при поиске в Sphinx есть результаты с дублированным идентификатором, потому что они находятся в обоих индексах (основной и дельта)? Я знаю, что могу решить эту проблему, запустив объединение обоих индексов, но я хочу знать, есть ли другой способ избежать слияния, потому что сервер может каждый раз запускать его дорого.

1 Ответ

0 голосов
/ 02 ноября 2018

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)

т.е. мы видим, что оба индекса имеют документы с идентификаторами 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. Список убийств - это список идентификаторов, назначенных индексу, который говорит, что эти идентификаторы должны быть удалены из любых предыдущих индексов. В зависимости от используемой версии (Sphinx 2 / Manticore / Sphinx 3) команды для определения списка уничтожений и их поведение могут различаться.

...