0

我将 sphinx 与 rails 一起使用,似乎除了我指定为索引的列之外,Sphinx 还搜索模型名称,并将其添加到摘录单词列表中。

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

编辑:
编辑:我意识到这在搜索自动完成窗口中没有发生,因为 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

和一个事件结果部分,_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>

我环顾四周,似乎无法弄清楚 - 我敢肯定在我错过的某个地方有一个选择。任何帮助将不胜感激,谢谢!

4

1 回答 1

1

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

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

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

并且在视图中

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

(还值得注意的是,将摘录作为局部传递给局部似乎不起作用)

于 2013-05-30T19:55:24.650 回答