ThinkingSphinx - 如何从摘录中排除模型名称?

时间:2013-05-30 14:25:16

标签: ruby-on-rails thinking-sphinx

我正在使用带有rails的sphinx,似乎除了我指定为索引的列之外,Sphinx还会搜索Model名称,并将其添加到摘录词列表中。

例如,我有一个名为'Event'的模型。如果我搜索“舞蹈”,我的结果也会突出显示“事件”一词,如果它出现在任何索引字段中,即“舞蹈事件”将突出显示,而不仅仅是“舞蹈”。知道如何阻止这种行为吗?

编辑:
编辑:我意识到搜索自动完成窗口中没有发生这种情况,因为ajax-y搜索路径的搜索方式不同:

results = ThinkingSphinx.search(params[:search], {:star => true})
results.context[:panes] << ThinkingSphinx::Panes::ExcerptsPane

错误摘录的搜索结果在特定模型上(见下文)

以下是代码:

event_index.rb

ThinkingSphinx::Index.define :event, :with => :active_record do
  indexes title
  indexes subtitle
  indexes vendor.name, :as => :event_vendor
  indexes vendor.city, :as => :event_city
  indexes genre.name, :as => :genre_name

    set_property :min_prefix_len => 3   
  set_property :enable_star => true
end

vendor_index.rb

ThinkingSphinx::Index.define :vendor, :with => :active_record do
  indexes :name
  indexes city, :as => :city

  set_property :min_prefix_len => 3 
  set_property :enable_star => true
end

search_controller.rb

 def index

        @events = Event.search params[:search], {:star => true , :per_page => 5, :page => params[:events_page]}
        @events.context[:panes] << ThinkingSphinx::Panes::ExcerptsPane

        @vendors = Vendor.search params[:search], {:star => true , :per_page => 5, :page => params[:vendors_page]}
        @vendors.context[:panes] << ThinkingSphinx::Panes::ExcerptsPane
end

和事件结果partial,_event.html.erb

<div class="event">
    <table>
        <tr>
            <td class="image">
                <% if event.image? %>
                    <%= image_tag event.image_url(:mid).to_s %>
                <% else %>
                    <img src='http://lorempixel.com/100/100/abstract/<%= (1..10).to_a.sample %>' />
                <% end %>
                <div class="genre_img">
                    <%= image_tag event.genre.image_url().to_s %>
                </div>
            </td>
            <td class="body">
                <%= event.excerpts.to_yaml %>
                <h3><%= link_to ( raw event.excerpts.title), event_path(event) %></h3>
                <p class="bold"> <%=  raw event.excerpts.subtitle %> </p>
                <p class="bold"> Genre: <%= raw  event.excerpts.genre_name %> </p>
                <p class="bold"><%= link_to ( raw event.excerpts.vendor_name), vendor_path(event.vendor) %></p>
                <p class="bold"> <%= raw event.excerpts.vendor_city %> </p>
            </td>
        </tr>
    </table>
</div>

我环顾四周似乎无法弄明白 - 我确信在某个地方我可以找到一个选项。任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

根据文档(TS~> 3.0.0),有两种方法可以添加摘录 - 通过窗格或创建对象。

出于某种原因,第一种方法将包括类/模型名称作为匹配,而第二种方法不包括。所以这有效:

@event_excerpter = ThinkingSphinx::Excerpter.new 'event_core',
  params[:query]

并在视图中

<h3><%= @event_excerpter.excerpt! event.title %></h3>

(另外值得注意的是,将excerpter作为局部传递给部分似乎不起作用)