太阳黑子轨道,突出显示的命中文本被截断,只返回一个包含匹配的片段

时间:2014-03-19 11:27:37

标签: ruby-on-rails solr sunspot

我正在使用太阳黑子实现全文搜索,我在其中存储文本字段以获得突出显示的结果。

型号代码:

searchable do
    text    :name,         :stored   => true, :boost => 5.0
    text    :body,         :stored   => true, :boost => 3.0
    # ... some other non-text fields
end

控制器代码:

@search = Model.search do
    fulltext searchtext, highlight: true   # searchtext comes from params
    # ... some other fields
end

渲染

@search.hits.each do |hit|
    hit.highlights(:name).each do |h|
        result = h.format { |word| "<result>#{word}</result>" }
        # output the result
    end
    hit.highlights(:body).each do |h|
        result = h.format { |word| "<result>#{word}</result>" }
        # output the result
    end
end

一切都很美妙,除了当我渲染突出显示的点击时,我只得到实际文本的一个片段。

所以,我没有得到这个短语(可能很长),而只是获得了它的一个片段。我一直在尝试将:fragment_size放入搜索定义(控制器)但无济于事。

有关如何输出FULL(:name或:body)的任何建议,而不仅仅是突出显示的片段 - &gt;击?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方法,但即使它工作正常,我相信应该有其他方式,所以如果你愿意,我仍然期待一些答案。

我的解决方法如下:

我将我在突出显示的匹配中放置的标记移除到一个新变量中:

a=result.gsub(/<\/?result>/,"")

使用Active Record

获取相应的字段
model=Model.find(hit.primary_key)

并用格式化的(a

替换未格式化的文本(变量result
newresult=model.body.gsub(a,result)

因此产生了预期的结果。