使用Thinking Sphinx索引字段+自定义文本

时间:2011-08-28 09:21:07

标签: ruby-on-rails sphinx thinking-sphinx

我在几个不同的模型上有索引,有时用户可能会搜索存在于多个模型中的值。现在,如果用户真的只对其中一个模型中的数据感兴趣,那么我希望用户能够使用某些内容来预先/后缀查询。

例如,如果我只想在我的市政模型中找到匹配项,我在该模型中设置了一个索引,以便用户现在可以查询"xyz municipality"(在引号中):

  define_index do
    indexes :name, :sortable => true
    indexes "name || ' municipality' name", :as => :extended_name, :type => :string
  end

这很好用。现在我也有一个人物模型,与市政当局有关系。我想,当只搜索Person模型时,可以使用相同的功能,这样我就可以说Person.search(“xyz municipality”)并让所有人都联系到该市。这是我在Person模型中的当前定义:

  has_many :municipalities,  :through => :people_municipalities

  define_index do
    indexes [lastname, firstname], :as => :name, :sortable => true
    indexes municipalities.name, :as => :municipality_name, :sortable => true
  end

但有什么方法可以在这个模型上创建一个索引,引用市政当局,就像我在市政模型本身那样?

1 个答案:

答案 0 :(得分:1)

如果你在源代码config/development.sphinx.conf的{​​{1}}的sql_query设置中查看生成的SQL,你会看到如何将citiesities.name连接在一起(我发布了一个例子,但它取决于你的数据库 - MySQL和PostgreSQL完全不同地处理这个问题。

我建议复制该字段,并插入这样的内容(SQL是伪代码):

person_core_0

另外:添加的内容没有多大意义:可以对此进行排序,也可以从关联中对原始字段进行排序 - 您是否要按所有连接在一起的市政名称进行排序?我猜不是:)