witam
mam model powiedzmy Element i do niego przypisane są tagi za pomocą pluginu acts_as_taggable_on_steroids, czyli są tabele tags i taggings. Czy jest możliwe za pomocą Spinxa, wyszukanie nie tylko po atrybutach modelu Element ale także po przypisanych tagach ?
Tak, wystarczy odpowiednio kierować dane do Sphinksa. Nie wiem, czy korzystasz z jakiegoś gem/pluginu do obsługi Sphinksa, ale jeszcze kilka wersji temu ThinkingSphinx tego nie potrafił i wygenerowane przez niego pliki konfiguracyjne wymagały drobnych poprawek.
Z tymże działa to tylko dla zwykłych indeksów, w chwili obecnej real-time nie wspiera takich operacji.
Zerknij na sekcję MVA w manualu: http://sphinxsearch.com/docs/current.html#attributes
tak, zapomniałem wspomnieć, używam thinking_sphinx. rzeczywiscie to prostsze niż mi się wydawało
pytanie, jak najlepiej aktualizować index? jakies zadanie w cronie np co 10 minut ?
Wszystko zależy od ilości danych.
Możesz indeksować całość co 5, 10, 60… minut. O ile dzieje się w akceptowalnym czasie.
Możesz indeksować przyrostowo co 5, 10, 60… minut, a potem na przykład raz na dobę łączyć indeksy.
Tu znów dokumentacja będzie pomocna: http://sphinxsearch.com/docs/current.html#live-updates
próbuje użyć trybu :any, wszystko ok dopuki nie daje :conditions
@elements = Element.search params[:search][:query],
:conditions => {:status => 1},
:match_mode => :any,
zwraca mi wtedy wszystko co zawiera słowa podane w zapytaniu lub status 1 (czyli za dużo), a mi potrzeba żeby zwracało elementy które zawierają słowa i mają status 1
w logu:
Dude, przeczytaj dokumentację, ułatwi Ci to życie.
http://freelancing-god.github.com/ts/en/searching.html#matchmodes
dokładnie z tej dokumentacji korzystam ale nadal nie rozumiem dlaczego coś nie tak z tym :conditions.
próbowałem to obejść za pomocą http://freelancing-god.github.com/ts/en/scopes.html ale dalej nic
[quote=Artur79]dokładnie z tej dokumentacji korzystam ale nadal nie rozumiem dlaczego coś nie tak z tym :conditions.
próbowałem to obejść za pomocą http://freelancing-god.github.com/ts/en/scopes.html ale dalej nic[/quote]
Jeżeli status jest atrybutem, to użyj :with.
status to kolumna w tabeli, próbowałem także z with, ale wtedy nie zwraca mi nic. Może w definicji indeksów coś jest nie tak, chociaż nie sądze
define_index do
indexes title, :sortable => true
indexes tags.name
end
[quote=Artur79]status to kolumna w tabeli, próbowałem także z with, ale wtedy nie zwraca mi nic. Może w definicji indeksów coś jest nie tak, chociaż nie sądze
define_index do
indexes title, :sortable => true
indexes tags.name
end
[/quote]
Wszystko po czym chcesz wyszukiwać w sphinxie musi być w define_index. Jeżeli status zawiera integery to powinien być dodany jako atrybut, tzn:
define_index od
has status
end
Inna sprawa - ThinkingSphinx / UltraSphinx są dobre do momentu, kiedy Sphinx / aplikacja są na jednej maszynie.
Pisanie konfiguracji Sphinksa z palca nie jest trudne, a Riddle jest dobrze udokumentowanym gemem i można spokojnie w kilku linijkach kodów napisać własny “sterownik”.
Ja szczerze mówiąc nie widzę większych problemów w takiej konfiguracji. Jedyne ograniczenie jest takie, że indeksowanie powinno być uruchamiane tylko na jednej maszynie.
Bardziej chodzi mi o to, że potem traci się część z “fajności”, którą te pluginy dają.
Jeśli aplikacja i Sphinx mieszczą Ci się na jednej maszynie to nie ma niczego lepszego. W developmencie także się sprawdza.