2009-11-05 11 views
26

Abbiamo deciso di utilizzare mongodb per alcune applicazioni Web (anziché mysql) ma vogliamo rimanere con la sfinge per l'indicizzazione/ricerca di tutti i dati memorizzati in mongodb. dato che l'id-oggetto mongodb è un hash per default - e vogliamo stare con questo - ora c'è un problema nell'uso della sfinge. Come si dice nella documentazione sfinge:utilizzando ricerca sphinx con mongodb come origine dati

tutti i documenti IDS deve essere univoco UNSIGNED diverso da zero numeri interi (32-bit o 64-bit, a seconda delle impostazioni tempo di costruzione).

quindi ... qual è il modo migliore per risolvere questo problema ... come possiamo mappare l'id-oggetto mongodb a un numero intero non zero (e viceversa)?

UPDATE

risposta di Casey è la direzione giusta di esaminare, anche se a si scopre attributi stringa sono in dev-attuale versione disponibile solo per l'origine dati SQL. per xmlpipe è necessario applicare una patch alla fonte di checkout. ulteriori informazioni al riguardo sono disponibili nello sphinx forum.

risposta

28

Non è possibile utilizzare l'ID oggetto come ID documento Sfinge - Gli ID oggetto MongoDB sono più grandi della dimensione massima degli ID documento di Sfinge.

Invece, è possibile incrementare un ID univoco durante la generazione dell'XML che Sphinx sta elaborando (presumo che si stia utilizzando xmlpipe per ottenere i dati Mongo in Sfinge?) E memorizzare l'ID oggetto MongoDB come attributo di stringa nella Sfinge.

Avrete bisogno della versione più recente sviluppo della Sfinge per fare questo - si veda la mia risposta a questa domanda per un po 'più in dettaglio: Sphinx without using an auto_increment id

+0

grazie mille ... sembra essere esattamente quello che mi serve! generalmente non ho problemi a gestire una versione di sviluppo. proverò domani e metto 'risposta', se tutto funziona come previsto. grazie ancora! – aurora