2009-11-05 11 views
26

Postanowiliśmy użyć mongodb dla niektórych aplikacji internetowych (zamiast mysql), ale chcemy pozostać z sfinksem do indeksowania/przeszukiwania wszystkich danych przechowywanych w mongodb. ponieważ identyfikator obiektu mongodb jest wartością domyślną - i chcemy pozostać z tym - teraz jest jeden problem z używaniem sfinksa. Jak mówi w dokumentacji Sfinks:używając wyszukiwania sfinksa z mongodb jako źródła danych

WSZYSTKIE DOKUMENT IDS musi być unikalny UNSIGNED niezerowe liczby całkowite (32-bitowe lub 64-bitowe, w zależności od ustawień czas budowy).

więc ... jaki jest najlepszy sposób na rozwiązanie tego problemu ... w jaki sposób możemy odwzorować identyfikator obiektu mongodb na niezerową liczbę całkowitą (i wstecz)?

UPDATE

Casey Odpowiedź jest właściwy kierunek, aby spojrzeć jednak na to okazuje atrybuty smyczkowe są w obecnej wersji dev-dostępna tylko dla źródła danych SQL. dla xmlpipe konieczne jest zastosowanie łatki do źródła kasowego. więcej informacji na ten temat można znaleźć w sphinx forum.

Odpowiedz

28

Nie można użyć identyfikatora obiektu jako identyfikatora dokumentu Sphinx - Identyfikatory obiektu MongoDB są większe niż maksymalny rozmiar identyfikatorów dokumentów Sphinx.

Zamiast tego można zwiększyć unikalny identyfikator podczas generowania kodu XML, który będzie przetwarzać Sphinx (zakładam, że używasz xmlpipe do pobierania danych Mongo do Sphinx?) I przechowuj identyfikator obiektu MongoDB jako atrybut ciągu w Sfinksie.

Będziesz mieć najnowszą wersję rozwojową Sfinksa to zrobić - patrz moją odpowiedź na to pytanie w nieco bardziej szczegółowo: Sphinx without using an auto_increment id

+0

dzięki bardzo ... wydaje się być dokładnie tym, czego potrzebujesz! generalnie nie mam problemu z uruchomieniem wersji rozwojowej. Spróbuję jutro i ustawię "odpowiedział", jeśli wszystko działa zgodnie z oczekiwaniami. dzięki jeszcze raz! – aurora

Powiązane problemy