2017-01-03 2 views
0

I ruby 1.9.3p392rails 3.2.21thinking sphinx 3.1.0 und Sphinx 2.2.4-id64-releaseSphinx Denken ohne Bedingung auf Anordnung von id funktioniert nicht

user_index.rb Datei mit bin, ist: -

ThinkingSphinx::Index.define :user, :with => :active_record do 
    indexes first_name, :sortable => true 
    indexes last_name 
    indexes email 
    indexes user_name 
    indexes company_id 
    indexes id 
    indexes user_type_id 
    indexes department.name 
    indexes department.id, :as => :department_id 
end 

Wenn ich suchen, wie: -

assigned_user_ids = [372, 373, 374, 375, 367, 376, 377, 378, 379, 380] 
@users = User.search(Riddle::Query.escape(params[:search]), 
    :conditions => {:company_id => @company.id}, 
    :without => {:id => assigned_user_ids}, :per_page => PAGINATION_SIZE, 
    :page => params[:page]) 

Aber es zeigt immer noch die user mit id = 372

Antwort

0

Es gibt zwei Probleme hier:

Die erste ist, dass Sie anstelle von Attributen für alle Nicht-String-Daten unter Verwendung von Feldern sind, und das bedeutet, einige Filter sind nicht zuverlässig zur Arbeit zu gehen. Das zweite Problem ist, dass id von Sphinx intern verwendet wird, also sollten Sie entweder das automatische Attribut sphinx_internal_id von Thinking Sphinx verwenden oder Ihrem eigenen Attribut einen Alias ​​hinzufügen.

So würde ich die folgende Indexdefinition empfehlen stattdessen:

ThinkingSphinx::Index.define :user, :with => :active_record do 
    indexes first_name, :sortable => true 
    indexes last_name 
    indexes email 
    indexes user_name 
    indexes department.name 

    has company_id 
    has user_type_id 
    has department.id, :as => :department_id 
end 

Und dann würde Ihre Suche sein:

assigned_user_ids = [372, 373, 374, 375, 367, 376, 377, 378, 379, 380] 
@users = User.search(Riddle::Query.escape(params[:search]), 
    :with  => {:company_id => @company.id}, 
    :without => {:sphinx_internal_id => assigned_user_ids}, 
    :per_page => PAGINATION_SIZE, 
    :page  => params[:page] 
) 

In einer völlig anderen Anmerkung: es sei denn, diese Suche nur verwendet wird, um durch Administratoren, würde ich Ihnen empfehlen nicht haben E-Mail-Adressen in Ihren indizierten Daten. Es ist in den meisten Situationen ein Sicherheitsrisiko, Personen zu erlauben, nach E-Mail-Adressen zu suchen.

+0

Dank @pat, es hat funktioniert. –

Verwandte Themen