我正在使用带有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>
我环顾四周似乎无法弄明白 - 我确信在某个地方我可以找到一个选项。任何帮助将不胜感激,谢谢!
答案 0 :(得分:1)
根据文档(TS~> 3.0.0),有两种方法可以添加摘录 - 通过窗格或创建对象。
出于某种原因,第一种方法将包括类/模型名称作为匹配,而第二种方法不包括。所以这有效:
@event_excerpter = ThinkingSphinx::Excerpter.new 'event_core',
params[:query]
并在视图中
<h3><%= @event_excerpter.excerpt! event.title %></h3>
(另外值得注意的是,将excerpter作为局部传递给部分似乎不起作用)