Сфинкс: что именно делает индексатор --merge? - PullRequest
1 голос
/ 21 февраля 2012

Руководство по сфинксу говорит , что слияние индексов должно сохранять старые ключевые слова вместе с новыми:

Обратите внимание, однако, что «старые» ключевые слова не будут автоматически удаляться в таких случаях. Например, если есть ключевое слово «old», связанное с документом 123 в DSTINDEX, и ключевое слово «new», связанное с ним в SRCINDEX, документ 123 будет найден обоими ключевыми словами после слияния.

Я не могу воспроизвести это.

  1. У нас есть документ с идентификатором 1 и текстом 'one' в индексе main
  2. Текст в таблице БД меняется с «один» на «два»
  3. indexer --rotate delta
  4. indexer --rotate --merge main delta
  5. Подождите, пока searchd перезагрузит индекс
  6. Теперь мы можем найти документ 1 по SELECT id FROM main WHERE match('two'), но match('one') ничего не находит.

Источники для обоих индексов определяются по существу как:

sql_query = SELECT id, text FROM tbl

Я также пытался указать ключевые слова с помощью sql_joined_field, и слияние не удерживает старые слова от него.

Означает ли это, что руководство неверно? Можно ли предположить, что если SRCINDEX имеет информацию для идентификатора (атрибуты и текстовые ключевые слова), процесс слияния отбрасывает все, что было в DSTINDEX для этого идентификатора, и заменяет его новой информацией?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Я спросил об этом Андрея Аксёнова (создателя Sphinx).Он сказал, что теперь они очищают дубликаты идентификаторов при объединении, если индекс docinfo является внешним.

Так что да, это ошибка в документации.

0 голосов
/ 22 февраля 2012

Если Sphinx обнаружил повторяющиеся идентификаторы, когда они исключаются из результатов поиска, значит, вы, Sphinx, возвращаете только уникальные идентификаторы.Вот почему вы не видели их в результатах поиска.

...