I've been working with TS for just a few days now, but thanks to your
great work and the good documentation out there, it was all pretty
easy to get set up. Until I tried to add attributes to filter search
results based on access permissions, that is.
I've seen multiple similar examples focused around creating a
multivalue string attribute based on authorized user IDs (or "0" for
public items), and I thought I was following the guidance completely.
Yet, every time I apply a filter that should allow the majority of the
records through (i.e. :with => {:authorized_ids => [0]} on a largely
public data set), I get 0 results. I've tried every permutation I can
think of in place of the [0] entry, and I've tried swapping :with
for :without, with no improvement.
The relevant code is below. Rails 3.0.3, recent version of Sphinx,
thinking-sphinx gem 2.0.1.
Am I 'Doing It Wrong'?
--
[app/models/project.rb]
class Project < ActiveRecord::Base
has_many :project_acls
has_many :users, :through => :project_acls
define_index do
...
has project_acls(:id), :as => :acl_ids, :type => :multi
has "IF(projects.private = 0, '0',
GROUP_CONCAT(project_acls.user_id SEPARATOR ','))",
:as => :authorized_ids,
:type => :multi
...
end
end
--
I have confirmed that the SQL query generated by TS and stored in the
config file actually produces the expected values for the
'authorized_ids' field, though I don't know how to test for that value
in the Sphinx indexes. Most rows would have a value of '0', while a
few have a value of '1' and one is '1,2' (where 1 and 2 are valid User
ids). 5 is a valid ProjectAcl id.
--
[rails console]
Project.search.total_entries
=> 31
Project.search( :with => {:acl_ids => [5]} ).total_entries
=> 0
Project.search( :without => {:acl_ids => [5]} ).total_entries
=> 0
Project.search( :with => {:authorized_ids => [0]} ).total_entries
=> 0
Project.search( :without => {:authorized_ids => [0]} ).total_entries
=> 0
Project.search( :with => {:authorized_ids => [1]} ).total_entries
=> 0
[etc.]
--
I don't think my YML settings are relevant, but just in case, here's
what I'm using:
--
[sphinx.yml]
development:
morphology: stem_en
enable_star: true
min_infix_len: 3
--
Again, any pointers or useful directed questions would be quite
welcome.
Thanks,
-Jonathan
--
You received this message because you are subscribed to the Google Groups
"Thinking Sphinx" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/thinking-sphinx?hl=en.