Thinking sphinx search returns nothing when multiple index files used on a single model

谁说胖子不能爱 提交于 2019-12-12 02:24:57

问题


Searching sometimes yields no results when my sphinx indices are separated into multiple files in one model.

The versions I'm using:

  • Rails - 4.1
  • Thinking Sphinx - 3.0.6
  • Sphinx - 2.0.9

I have five indices on this model:

ThinkingSphinx::Index.define :incident, name: "incident_index_1" ... do
  indexes name
end

ThinkingSphinx::Index.define :incident, name: "incident_index_5" ... do
  indexes tags.name, as: :tag      
  indexes custom_fields_values.value, as: :custom
end

Searching separately, the queries return correct results:

Incident.search(conditions: { custom: "dd" })
Incident.search("some string")

However, combining the field-specific query with the generic query sometimes returns nothing:

Incident.search("some string", conditions: { custom: "dd" })

If "some string" is in the tag field (which is defined in the same index file), it works. If it is in the name field (which is defined in a different index file), it doesn't work.


回答1:


As clarified via discussions on the Sphinx forums, the issue here is that the fields are in different indices, and a Sphinx document (a record in an index, which in the Thinking Sphinx/Rails context is an ActiveRecord model instance) should only exist in one Sphinx index, not spread across several.

Edit

To complete the answer here in SO and make the question standalone, the index now looks like this:

(1..5).each do |ind|
  ThinkingSphinx::Index.define :incident, name: "incident_index_#{ind}" ... do
    where "incidents.id % 5 = #{ind - 1}"
    indexes ...
    has ...
end

Documents are thus equally distributed between five sphinx index files, without a document existing in more than one index file.



来源:https://stackoverflow.com/questions/30287788/thinking-sphinx-search-returns-nothing-when-multiple-index-files-used-on-a-singl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!