【问题标题】:ThinkingSphinx - how to exclude model name from excerpt?ThinkingSphinx - 如何从摘录中排除模型名称?
【发布时间】:2013-05-30 14:25:16
【问题描述】:

我正在使用带有 rails 的 sphinx,似乎除了我指定为索引的列之外,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>

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

【问题讨论】:

    标签: ruby-on-rails thinking-sphinx


    【解决方案1】:

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

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

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

    在视图中

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

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

    【讨论】:

    • 我会在有空的时候开发一个补丁来解决这个问题:)
    • 太棒了,感谢您的出色工作!也在github上发布了这个问题
    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 2013-11-06
    • 2023-03-29
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多