我正在使用太阳黑子实现全文搜索,我在其中存储文本字段以获得突出显示的结果。
型号代码:
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;击?
提前致谢。
答案 0 :(得分:0)
我找到了一个解决方法,但即使它工作正常,我相信应该有其他方式,所以如果你愿意,我仍然期待一些答案。
我的解决方法如下:
我将我在突出显示的匹配中放置的标记移除到一个新变量中:
a=result.gsub(/<\/?result>/,"")
使用Active Record
获取相应的字段model=Model.find(hit.primary_key)
并用格式化的(a
)
result
)
newresult=model.body.gsub(a,result)
因此产生了预期的结果。