2014-08-28 11 views
6

Ich habe 15.000 Kurse und ich würde gerne den Titel jeder Klasse erhöhen, so dass genaue Übereinstimmungen einer Klasse über alles andere verstärkt werden.Searchkick Boost genaue Übereinstimmungen

Wenn ich Course.seach_kick ('Theorie von Interesse', 1) mache Die richtige Suche wird mit dem Kurs 'Theorie von Interesse' als erstes Ergebnis zurückgegeben.

Wenn ich jedoch Course.search_kick ('Theorie von Interesse 3618', 1) 3618 die Katalognummer ist, werden keine Ergebnisse zurückgegeben. Ich erwartete, dass die Theorie des Interessenkurses zurückgegeben würde, und kehrte zuerst zurück. Es scheint, dass die Suche nach der vollständigen Zeichenfolge "Theory of Interest 3618" im Titel des Kurses enthalten ist.

Ich verstehe 'und' ist der Standard-Operator, Ist es eine Voraussetzung, dass ich den 'oder' Operator verwenden? Ich zögere, den 'oder' Operator wegen der unerwarteten Ergebnisse zu verwenden.

Danke, ich genieße wirklich, den Edelstein zu benutzen.

Suchmethode:

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

haben Sie das jemals gelöst? – Kathan

+1

@Kathan Nicht mit dem Such-Kick-Juwel, endete ich damit, dass ich mit voller elastischer Suche gehen musste, anstatt das Such-Kick-Juwel zu verwenden. – srm

Antwort

2

Warum filtern catalog_number nicht in where-Klausel:

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

In den meisten Fällen, in denen Klausel von einem IF kommt:

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 
    ) 

Sie einfügen so viele wie möglich filtert in where-Klausel, genau so wie ActiveRecord.where()

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

Verwandte Themen