9

Obecnie używam Act_as_taggable_on do tagowania i pg_search do przeszukiwania mojej bazy danych PostgreSQL w mojej aplikacji Rails 3.Railsy: Jak wyszukiwać znaczniki wygenerowane przez Act_As_Taggable_On z PG_Search? (postgresql)

Jak przeszukiwać znaczniki wygenerowane przez gem act_as_taggable_on przy pomocy pg_search? Mogę zobaczyć znaczniki urzędu mówiąc „Post.find (1) .tag_list”, ale nie ma „tag” kolumny w tabeli post, więc gdy uruchomię

pg_search_scope :search_by_weight, :against => {:tag_list => 'A', :title => 'B', :content => 'C'} #,:using => [:tsearch => {:prefix => true}] #:trigram, :dmetaphone] 

to daje mi błąd, ponieważ kolumna Post.tag_list nie istnieje w tabeli Post. Jak się nazywa, kiedy można znaleźć wartość przez złącze kropkowe (to znaczy mission.tag_list), ale gdy nie istnieje w tabeli? Nie wiedziałem, co napisać. Więc w zasadzie, w jaki sposób przekazać w nieistniejącej kolumnie jako parametry?

Ponadto, można zauważyć, że w komentarzu do

:using => [:tsearch => {:prefix => true}] #:trigram, :dmetaphone] 

powyżej. Nie mogę znaleźć sposobu instalacji dodatkowych modułów dla PostgreSQL. Gdzie mogę wpisać CREATE EXTENSION? (używając Ubuntu 11.10 i Postgresql 9.1.3 -> i Heroku do produkcji)

+0

@muistooshort żadnego pomysłu, w jaki sposób rozwiązać ten problem? – kibaekr

Odpowiedz

8

O wiele bardziej proste podejście jest po prostu za pomocą skojarzenia i wyszukiwania, które poprzez pg_search który odbywa się to tak:

class Item < ActiveRecord::Base 
include PgSearch 

    pg_search_scope :full_search, 
    :against => { 
    :item_status => 'A', 
    :title => 'B', 
    :description => 'C'  
    },  
    :associated_against => { 
    :tags => [:name]  
    } 
end 

Właśnie realizowany to w jednym z moich projektów i to działa dobrze (przeszukał nazwy znaczników). Niestety nie mogę wymyślić, jak obciążyć powiązaną relację, ponieważ zawiera ona kolumnę "znaczniki" nie znalezioną w tabeli Elementy.

+0

Dzięki za odpowiedź! Tak, do tej pory doszedłem do tego punktu, ale miałem ten sam problem z ważeniem tagów. Czy udało ci się uruchomić dodatkowe funkcje wyszukiwania (np. Trygram)? (Czy używasz Heroku?) – kibaekr

+0

Witam, nie próbowałem dodawać żadnych innych dodatkowych funkcji wyszukiwania, tylko skojarzeniowych. Używam Heroku i niestety klej pg_search nie działa teraz dla mnie, ale pracuję nad nim. Podobno pg_search jest łatwy w użyciu w Heroku w przeciwieństwie do innych pełnotekstowych wyszukiwarek, więc myślę, że będzie to łatwa łatwa. Nadal byłoby wspaniale, gdyby znaczniki mogły być ważone lub gdyby znaczniki mogły być wykonane z "dokładnym dopasowaniem", w przeciwnym razie, jaki jest cel znaczników? – user783437

+0

Rozumiem. Tak, myślę, że mam dodatkowe funkcje do pracy lokalnie, ale nie sądzę, że działa teraz na Heroku. (Myślę, że może to być spowodowane tym, że muszę zaktualizować lub zainstalować pakiety contrib na serwerze, ale heroku nie pozwoli mi uzyskać dostępu do aktualizacji i instalacji bazy danych pg). – kibaekr

1

Napisałem moją implementację w plpgsql kilka lat temu. Zobacz mój blog: http://omarqureshi.net/articles/2010-12-25-tsearch2-for-rails-applications, który opisuje, jak sprawić, by działał.

+0

Hm ... jako początkujący, nadal jest bardzo mylące, aby spróbować zrozumieć, co robisz w swoim blogu i zastosować go do mojej sytuacji. – kibaekr

+0

Zacznę od przeczytania przewodnika na plpgsql i dokumentacji spustu dla Postgres. –

+0

To jest rozwiązanie! Bardzo dobry post Omar, chociaż niektóre funkcje są nieco zbyt skomplikowane i trochę je posprzątałem. Mimo to nigdy bym tego nie zrobił bez twojego posta na blogu. Chciałbym zagłosować na ciebie przez 10 punktów, gdybym mógł :) Pozdrawiam –

3

ten pracował dla mnie, aby uzyskać tagi ważony oraz

pg_search_scope :search_by_weight, 
     :against => { 
     :title => 'B', 
     :content => 'C'  
    },  
    :associated_against => { 
     :tags => { :name => 'A' }  
    }, 
    using: {tsearch: {dictionary: "english"}} 
Powiązane problemy