Usando a pesquisa de esfinge com o MongoDB como DataSource
Pergunta
Decidimos usar o MongoDB para algum aplicativo da Web (em vez de MySQL), mas queremos ficar com a SPHINX para indexação/pesquisa de todos os dados armazenados no MongoDB. Como o ID do objeto MongoDB é um hash por padrão-e queremos ficar com isso-agora há um problema no uso da Esfinge. Como diz na documentação da Esfinge:
Todos os IDs do documento devem ser números inteiros diferentes de zero não assinados (32 bits ou 64 bits, dependendo das configurações de tempo de construção).
Então ... qual é a melhor maneira de resolver esse problema ... como podemos mapear o objeto MongoDB-ID para um número inteiro diferente de zero (e voltar)?
ATUALIZAR
A resposta de Casey é a direção certa para analisar, no entanto, os atributos da string estão na versão dev atual disponível apenas para o SQL DataSource. Para xmlpipe, é necessário aplicar um patch na fonte de checkout. mais informações sobre isso podem ser encontradas no Fórum de Esfinge.
Solução
Você não pode usar o ID do objeto como um documento SPHINX - os IDs de objeto MongoDB são maiores que o tamanho máximo dos IDs de documentos da SPHINX.
Em vez disso, você pode incrementar um ID exclusivo ao gerar o XML que a Sphinx vai processar (estou assumindo que você está usando o XMLPipe para obter seus dados mongonos no SPHINX?) E armazenar o ID do objeto MongoDB como um atributo de string no SPHINX.
Você precisará da versão mais recente de desenvolvimento da Sphinx para fazer isso - veja minha resposta para esta pergunta para obter mais detalhes: Esfinge sem usar um ID do Auto_incrent