2014-08-28 20 views
6

Mam 15 000 kursów i chciałbym podnieść tytuł każdej klasy, aby dokładne mecze danej klasy zostały wzmocnione ponad wszystko inne.Searchkick boost dokładne mecze

Kiedy robię Course.seach_kick ("teoria zainteresowania", 1) Poprawne wyszukiwanie jest zwracane z "teorią zainteresowania" kursu jako pierwszym wynikiem.

Jednak, gdy wykonuję Course.search_kick ("Teoria zainteresowania 3618", 1)
3618 to numer_katalogu, żadne wyniki nie są zwracane. Spodziewałem się, że kurs teorii zainteresowania zostanie zwrócony i wróciłem pierwszy. Wygląda na to, że wyszukiwanie poszukuje kompletnego ciągu "teorii zainteresowania 3618", który będzie zawarty w tytule kursu.

Rozumiem, że "i" jest domyślnym operatorem, Czy jest to wymóg, że muszę użyć operatora "lub"? Nie chcę używać operatora "lub" z powodu nieoczekiwanych wyników.

Dzięki, bardzo lubię używać klejnotu.

metoda wyszukiwania:

def self.search_kick(query, page) 
    search(query, 
     fields: ["title^10", "description", "crse_id", "subject", "catalog_number" ], 
     facets: [:subject], 
     misspellings: false, 
     page: page, 
     per_page: 20 
     ) 
end 

def search_data 
    { 
    title: title, 
    description: description, 
    crse_id: crse_id, 
    subject: subject, 
    catalog_number: catalog_nbr 
    } 
end 
+0

Czy kiedykolwiek rozwiązałeś to? – Kathan

+1

@Kathan Nie z klejnotem wyszukiwania Kick, skończyłem z Elastic Search, a nie z klejnotem Search Kick. – srm

Odpowiedz

2

Dlaczego nie filtrować catalog_number w którym klauzula:

search(query, 
    fields: ["title^10", "description", "crse_id", "subject" ], 
    facets: [:subject], 
    misspellings: false, 
    where: {catalog_number: 3618}, 
    page: page, 
    per_page: 20 
    ) 

W większości przypadków, w których klauzula pochodzi z IF:

conditions = {} 
if params[:catalog_number].present? 
    conditions[:catalog_number] = params[:catalog_number].to_i 
end 
search(query, 
    fields: ["title^10", "description", "crse_id", "subject" ], 
    facets: [:subject], 
    misspellings: false, 
    where: conditions, 
    page: page, 
    per_page: 20 
    ) 

można wstawiać jak najwięcej filtrów do klauzuli where, tak samo jak ActiveRecord.where()

docs ref: https://github.com/ankane/searchkick#queries