在rails中使用thinking-sphinx创建搜索,只搜索索引的某些属性

时间:2016-06-06 16:14:55

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

我在sphinx中有一个像这样的索引:

ThinkingSphinx::Index.define :publication, :with => :active_record do
  indexes transcript.transcript_text, :as => :transcript
  indexes taggings.tag.name, :as => :tags
end

我想进行无视成绩单的搜索,只搜索代码。有没有办法构建搜索来做到这一点?

我认为这个索引可能不可能,所以我为此目的创建了一个新的:

ThinkingSphinx::Index.define :publication, :name => 'tag_only', :with => :active_record do
  indexes taggings.tag.name, :as => :tags
end

但是,我找不到任何有关如何在搜索中实际使用这样的命名索引的信息。我在哪里指定我想在这样的查询中使用tag_only索引:

Publication.search(terms, :with => with_conditions, :ranker => :matchany)

任何见解都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

根据我的理解,定义中的每个indexes都在底层的sphinx索引中创建field

默认情况下,对索引的搜索查询会搜索所有字段。因此,在您的第一个示例中,对该索引的搜索将包括两个字段。

在第二个索引上搜索,只有一个字段,根据定义,只搜索该字段。所以不需要具体说明特定领域。

...要仅搜索特定索引中的一个(或其他子集)字段,可以直接使用Sphinxes Extended语法。 http://sphinxsearch.com/docs/current.html#extended-syntax

或者看起来可以使用条件 http://freelancing-gods.com/thinking-sphinx/searching.html#conditions (必须映射到自动扩展查询:)

这样的东西
Publication.search :conditions => {:tags => terms}, :ranker => :matchany

其中:tags就是你在定义中所谓的字段(抱歉,不知道ruby语法是否完全正确。)