использование поиска sphinx с mongodb в качестве источника данных

StackOverflow https://stackoverflow.com/questions/1680633

  •  16-09-2019
  •  | 
  •  

Вопрос

Мы решили использовать mongodb для некоторого веб-приложения (вместо mysql), но хотим остаться со sphinx для индексации / поиска всех данных, хранящихся в mongodb.поскольку идентификатор объекта mongodb по умолчанию является хэшем - и мы хотим придерживаться этого - теперь при использовании sphinx возникает одна проблема.Как сказано в документации sphinx:

ВСЕ ИДЕНТИФИКАТОРЫ ДОКУМЕНТОВ ДОЛЖНЫ быть УНИКАЛЬНЫМИ НЕНУЛЕВЫМИ ЦЕЛЫМИ ЧИСЛАМИ БЕЗ ЗНАКА (32-РАЗРЯДНЫМИ или 64-РАЗРЯДНЫМИ, в ЗАВИСИМОСТИ ОТ НАСТРОЕК ВРЕМЕНИ СБОРКИ).

итак ...каков наилучший способ решить эту проблему?..как мы можем сопоставить идентификатор объекта mongodb с ненулевым целым числом (и обратно)?

Обновить

ответ Кейси - это правильное направление для изучения, однако оказывается, что строковые атрибуты в текущей dev-версии доступны только для источника данных sql.для xmlpipe необходимо применить исправление к исходному коду проверки.более подробную информацию об этом можно найти в форум сфинкса.

Это было полезно?

Решение

Вы не можете использовать идентификатор объекта в качестве идентификатора документа Sphinx - идентификаторы объектов MongoDB больше максимального размера идентификаторов документов Sphinx.

Вместо этого вы могли бы увеличить уникальный идентификатор при генерации XML, который будет обрабатывать Sphinx (я предполагаю, что вы используете xmlpipe для передачи ваших данных Mongo в Sphinx?) и сохранить идентификатор объекта MongoDB как строковый атрибут в Sphinx.

Для этого вам понадобится последняя версия Sphinx для разработки - смотрите мой ответ на этот вопрос немного подробнее: Sphinx без использования идентификатора auto_increment

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top