Definitely looks like a bug to me - and now that I’m investigating further, it 
looks like there are several bugs. Am putting some integration specs in place 
and working on getting the alternative-id feature actually working! Though it’s 
midnight here, so it’s likely something I’ll get a bit further on tomorrow.

> On 19 Jul 2017, at 11:43 pm, Melody B <[email protected] 
> <mailto:[email protected]>> wrote:
> 
> A little update:
> 
> I'm currently running the latest development version of thinking-sphinx from 
> github, riddle 2.2.0, and told sphinx to treat the uuid keys as strings. 
> Configuration generates now, but I'm getting the same error I was when I 
> locally patched my gem version before I reached out -- whenever I try to save 
> a new instance of my indexed model it fails with this stack trace:
> 
> TypeError:
>   no implicit conversion of Fixnum into String
> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/bundler/gems/thinking-sphinx-9860c9452279/lib/thinking_sphinx/core/index.rb:29:in
>  `+'
> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/bundler/gems/thinking-sphinx-9860c9452279/lib/thinking_sphinx/core/index.rb:29:in
>  `document_id_for_key'
> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/bundler/gems/thinking-sphinx-9860c9452279/lib/thinking_sphinx/deltas/default_delta.rb:16:in
>  `delete'
> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/bundler/gems/thinking-sphinx-9860c9452279/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb:14:in
>  `block in after_commit'
> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/bundler/gems/thinking-sphinx-9860c9452279/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb:13:in
>  `each'
> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/bundler/gems/thinking-sphinx-9860c9452279/lib/thinking_sphinx/active_record/callbacks/delta_callbacks.rb:13:in
>  `after_commit'
> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/bundler/gems/thinking-sphinx-9860c9452279/lib/thinking_sphinx/callbacks.rb:7:in
>  `block (2 levels) in callbacks'
> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/activesupport-4.2.8/lib/active_support/callbacks.rb:455:in
>  `public_send'
> 
> Taking a cursory glance at the delete method in DefaultDelta I'm wondering if 
> this is perhaps possibly the culprit?
>  
> def delete(index, instance)
>   ThinkingSphinx::Deltas::DeleteJob.new(
>     index.name, index.document_id_for_key(instance.id)
>   ).perform
> end
>  
> I don't know much about how the pieces of this fit together, but I wouldn't 
> expect instance.id to be the correct key to fetch on when an alternative 
> primary key has been defined. I can continue to try to chase this down and 
> perhaps submit a PR if you think this is likely a bug, or try to find a 
> minimally reproducing example that I can share so that we can rule out 
> configuration or environment issues? I'm open to suggestions on how best to 
> proceed.
> 
> ~ Melody
> 
> On Wednesday, July 19, 2017 at 3:22:37 AM UTC-4, Pat Allan wrote:
> It doesn’t look like you have MVAs - the example you shared is a field (via 
> the `indexes` method), and your right, the joins using UUID columns to get to 
> that data should be fine. The attributes (via the `has` method) you have 
> listed, as you’ve noted, are UUIDs and strings should do the trick there.
> 
> So, maybe Sphinx and TS can actually do what’s needed? Do you want to talk 
> about what’s now not working?
> 
> Cheers,
> 
> — 
> Pat
> 
>> On 19 Jul 2017, at 12:49 pm, Melody B <[email protected] <>> wrote:
>> 
>> I'm not sure whether I need multi-value attributes or not, the only line I 
>> have in here that's particularly similar to the one you quoted is this:
>> 
>> indexes choices.option.canonical_name, as: :option_names
>> 
>> In order to get that data, you would need to join choices and option on uuid 
>> columns, as all of these models have uuid primary & foreign keys. I don't 
>> think I have any that do this specifically for ids, I defined these to get 
>> it to stop crashing on configure:
>> 
>> has response_id, type: :string
>> has response.mission_id, type: :string
>> has questioning.question_id, type: :string
>> 
>> But it still doesn't seem to be working -- this may have more to do with my 
>> app code than thinking sphinx/sphinx though, I haven't gotten deep into 
>> sorting it out now that it's no longer completely broken. I'll try updating 
>> to develop, a newer riddle, and making sure I'm on a good version of sphinx 
>> (I'm on 2.2.11 locally, and could hopefully update production instances if 
>> necessary)
>> 
>> I've been getting slowly resigned to the fact that I may need to switch 
>> search solutions (and actually already tried switching to pg_search because 
>> in terms of the actual search features we're taking advantage of our needs 
>> are really very mild and removing an external dependeny seemed like a net 
>> benefit in terms of future maintenance) but it can't do 
>> highlighting/excerpting on searches against associations (weird bug) and 
>> hasn't updated to expose an interface for postgres 9.6's exact phrase 
>> matching yet. I've been trying to evaluate other solutions, but finding info 
>> about which ones support the exact weird combination of constraints I'm 
>> dealing with when they support each thing I want to do separately is a bit 
>> of a challenge.
>> 
>> In any case, thanks so much for your help!
>> 
>> ~ Melody
>> 
>> On Tuesday, July 18, 2017 at 10:09:35 PM UTC-4, Pat Allan wrote:
>> Hmm. The recent versions of Sphinx do support filtering on string 
>> attributes, so you could possibly set the explicit `:type => :string` for 
>> attributes based on UUID columns. However, that’ll only work for 
>> single-value attributes (and additionally, you’ll want to use the latest in 
>> the `develop` branch for TS and ensure the bundled version of the Riddle gem 
>> is v2.2.0, as there are some changes around properly quoting string 
>> attributes in search queries).
>> 
>> If you’re not across the Sphinx terminology, a multi-value attribute (MVA) 
>> is essentially an attribute with a data type of array, but the arrays can 
>> only hold integers. So, in practice it might look something like the 
>> following in a TS index definition:
>> 
>>     has users.id <http://users.id/>, :as => :user_ids
>> 
>> I’d expect, however, that TS is fine with generating SQL joins across UUID 
>> keys - it’s just the actual attribute values being the issue. If you need 
>> multi-value UUID attributes, then it feels like your paths are either adding 
>> fake foreign keys, or switching to a different search tool - and I’m sure 
>> neither of those options are particularly simple. Fingers crossed that you 
>> only need single-value attributes for the UUID columns?
>> 
>> Feel free to ask any further questions :)
>> 
>> — 
>> Pat
>> 
>>> On 19 Jul 2017, at 11:36 am, Melody B <[email protected] <>> wrote:
>>> 
>>> Thanks, I forgot that I had locked my version to 3.1.x in my gemfile when I 
>>> tried to update the gem, so I hadn't noticed that I wasn't on the latest. I 
>>> feel a bit silly now. I'm now getting a different error relating to my 
>>> foreign keys (which are also uuid) not mapping to a valid sphinx type. 
>>> 
>>> Is there a way around this besides adding additional fake foreign keys to 
>>> go with my fake primary keys and putting those on every model I need sphinx 
>>> to be aware of? Would there even be a way to configure thinking sphinx so 
>>> that it tried to find the associated records through those instead? 
>>> Unfortunately I genuinely do need UUID keys for this app.
>>> 
>>> ~ Melody
>>> 
>>> On Tuesday, July 18, 2017 at 9:11:04 PM UTC-4, Pat Allan wrote:
>>> Hi Melody,
>>> 
>>> There was a couple of commits related to fixing alternative primary keys 
>>> that are part of v3.3.0 - I realise if you’re not familiar with this gem or 
>>> Sphinx it could be daunting, but I’d recommend upgrading if at all possible.
>>> 
>>> The release notes for v3.2.0 and v3.3.0 (the only releases since v3.1.4) 
>>> cover off notable changes - I’d say there’s a good chance you won’t hit any 
>>> issues though:
>>> https://github.com/pat/thinking-sphinx/releases/tag/v3.2.0 
>>> <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fpat%2Fthinking-sphinx%2Freleases%2Ftag%2Fv3.2.0&sa=D&sntz=1&usg=AFQjCNHh69DuVoiXcTHiNlQYsZTDWlq_TA>
>>> https://github.com/pat/thinking-sphinx/releases/tag/v3.3.0 
>>> <https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fpat%2Fthinking-sphinx%2Freleases%2Ftag%2Fv3.3.0&sa=D&sntz=1&usg=AFQjCNGTQohrWlNsNkBgQ_IFFcGiTo8UzQ>
>>> 
>>> If the error (or something like it) is still happening on v3.3.0, do let me 
>>> know!
>>> 
>>> Cheers,
>>> 
>>> — 
>>> Pat
>>> 
>>>> On 19 Jul 2017, at 8:10 am, Melody B <[email protected] <>> wrote:
>>>> 
>>>> I'm getting an error on configure:
>>>> 
>>>> Generating configuration to ~/myapp/config/development.sphinx.conf
>>>> rake aborted!
>>>> NoMethodError: undefined method `<<' for nil:NilClass
>>>> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/thinking-sphinx-3.1.4/lib/thinking_sphinx/active_record/sql_source.rb:96:in
>>>>  `block in append_presenter_to_attribute_array'
>>>> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/thinking-sphinx-3.1.4/lib/thinking_sphinx/active_record/sql_source.rb:93:in
>>>>  `each'
>>>> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/thinking-sphinx-3.1.4/lib/thinking_sphinx/active_record/sql_source.rb:93:in
>>>>  `append_presenter_to_attribute_array'
>>>> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/thinking-sphinx-3.1.4/lib/thinking_sphinx/active_record/sql_source.rb:131:in
>>>>  `prepare_for_render'
>>>> ~/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/thinking-sphinx-3.1.4/lib/thinking_sphinx/active_record/sql_source.rb:65:in
>>>>  `render'
>>>> 
>>>> I have a few weird things going on in my setup that are (probably?) having 
>>>> an impact.
>>>> My database is postgres has uuid primary keys
>>>> I defined a custom field that generates a bigint in a before_create 
>>>> callback called secondary_id -- this seemed like the best way to provide 
>>>> sphinx with something it could index on but if this is the wrong way to go 
>>>> about keeping my uuid primary keys i'm open to alternative suggestions
>>>> I set secondary_id as the primary key for sphinx in the index definition 
>>>> with the following code:
>>>> ThinkingSphinx::Index.define :answer, with: :active_record, primary_key: 
>>>> :proxy_id do ... end
>>>> I'm honestly not sure what's going on here -- I tried poking around in the 
>>>> code to sort out why this was happening and I tried guarding for nil on 
>>>> that line allows configuring to finish, but it predictably continues to 
>>>> explode during actual operation when I create a new instance of :answer -- 
>>>> I knew that was a longshot, but any help would be appreciated. I'm not 
>>>> particularly experienced with sphinx or thinking-sphinx, I inherited this 
>>>> project after it was already in place (the move to uuid primary keys is 
>>>> fairly recent, and this is the last major blocker) so just let me know if 
>>>> you need any additional info or context.
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "Thinking Sphinx" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>> email to thinking-sphi...@ <>googlegroups.com <http://googlegroups.com/>.
>>>> To post to this group, send email to thinkin...@ <>googlegroups. 
>>>> <http://googlegroups.com/>com <http://googlegroups.com/>.
>>>> Visit this group at https://groups.google.com/group/thinking-sphinx 
>>>> <https://groups.google.com/group/thinking-sphinx>.
>>>> For more options, visit https://groups.google.com/d/optout 
>>>> <https://groups.google.com/d/optout>.
>>> 
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "Thinking Sphinx" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to  <> <>thinking-sphinx+ 
>>> <mailto:[email protected]> <>unsubscribe 
>>> <mailto:[email protected]>@googlegroups.com 
>>> <mailto:[email protected]>.
>>> To post to this group, send email to [email protected] <>.
>>> Visit this group at https://groups.google.com/group/thinking-sphinx 
>>> <https://groups.google.com/group/thinking-sphinx>.
>>> For more options, visit https://groups.google.com/d/optout 
>>> <https://groups.google.com/d/optout>.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Thinking Sphinx" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <>.
>> To post to this group, send email to [email protected] <>.
>> Visit this group at https://groups.google.com/group/thinking-sphinx 
>> <https://groups.google.com/group/thinking-sphinx>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Thinking Sphinx" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> Visit this group at https://groups.google.com/group/thinking-sphinx 
> <https://groups.google.com/group/thinking-sphinx>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/thinking-sphinx.
For more options, visit https://groups.google.com/d/optout.

Reply via email to