2010-01-16 13 views
5

Zainstalowałem Sphinx i Thinking-Sphinx kilka dni temu na moim ruby ​​na szynach 2.3.2, a podstawowe wyszukiwanie działa świetnie. Oznacza to, bez żadnych warunków. Teraz chcę filtrować wyszukiwanie z pewnymi warunkami.Sfinks - Kiedy używać "has" i "indeksów" dla pól

mam model ogłoszenia, a indeks wygląda następująco:

define_index do 
    indexes title, :as => :title, :sortable => true 
    indexes description, :as => :description, :sortable => true 
    end 

Może się mylę, ale zauważyłem, że tylko wtedy, gdy dodałem składnię :sortable => true do tych atrybutów, można używać ich jako warunki w moich poszukiwaniach. W przeciwnym razie nic nie znajdzie.

Teraz używam również wtyczki acts_as_taggable_on, która wygenerowała moje dwie tabele db: tags i taggings. Nie mam modelu do tagów, po prostu mam acts_as_taggable_on :tags, :categories w moim modelu Ogłoszenia.

Co chciałbym teraz zrobić, to filtrować według tagów. Tak więc próbowałem dodać do mojego indeksu has tags(:id), :as => :tag_ids bez powodzenia, a także indexes tags(:id), :as => :tag_ids, ale to też nie działało.

Jak mogę budować indeksy więc mogę zrobić coś takiego:

Announcement.search 'some word', :conditions => {:tag_ids => some_id} 

a także, co jest różnica między has i indexes

Dzięki Brian

Odpowiedz

10

Niech mnie odpowiedz na twoje pytania na odwrocie. indexes whatever oczekuje stringa, to właśnie Sphinx będzie szukał tekstu, który podasz.

Z drugiej strony, has whatever NIE dodaje tej zawartości do pól do przeszukiwania. Oczekuje przede wszystkim liczb, ponieważ używasz tych rzeczy do sortowania i filtrowania po sfinks już zrobił wyszukiwania.

Wreszcie, wydaje mi się, że chcesz has tags(:id), :as => :tag_ids w swoim modelu i :with => {:tag_ids => some_id} w wyszukiwaniu zamiast używać :conditions. Warunki są stosowane w polach tekstowych, które zostały zaindeksowane, jako sposób wykonywania wyszukiwań tekstowych w określonych polach zamiast wszystkich indeksowanych pól. Opcja "Z" służy do filtrowania wyników przy użyciu atrybutów określonych w has whatever.

+0

Dziękuję bardzo! Spróbuję tego. –

+0

Nie wiem dlaczego, ale to nie działa. Jak już wspomniałem, nie mam modelu Tag, używam tylko wtyczki acts_as_taggable_on. Czy to możliwe, że problem jest przyczyną problemu? –

+0

To znaczy, nie mam pól "znaczników" w tabeli ogłoszeń. Wtyczka generuje dwie tabele: znaczniki i znaczniki. Relacja między zapowiedziami a tagami odbywa się poprzez tabelę tagów. Czy ma to coś wspólnego z tym? –

Powiązane problemy