rif*_*aff 5 ruby solr full-text-search ruby-on-rails sunspot
我想用sunspot重现以下原始solr查询
q=exact_term_text:foo OR term_textv:foo* OR alternate_text:bar*
Run Code Online (Sandbox Code Playgroud)
但我无法通过标准的太阳黑子界面了解这是否可行,因为它看起来像:
fulltext方法似乎不接受多个text/search_fields参数fulltext,好像我传递了一个"foo"或者"bar"结果不匹配q=*:* with(:term).starting_with('foo*')(顾名思义)应用为过滤查询,因此不参与评分.似乎可以手工组成字符串(或可能使用adjust_solr_params),但这似乎是hackish.有更好的解决方案吗?
在Sunspot 2.0.0中,存在无证件且不受支持的行为.作者本人建议它不应该,并且在未来的版本中可能不会.
您可以将多个全文调用传递到搜索定义中
Post.search do
fulltext "foo", {:fields => :exact_term}
fulltext "bar", {:fields => :alternate}
end
Run Code Online (Sandbox Code Playgroud)
这导致(来自日志)的solr查询
INFO: [] webapp=/solr path=/select
params={fl=*+score&start=0&q=_query_:"{!dismax+qf%3D'exact_term'}foo"+_query_:"{!dismax+qf%3D'alternate'}bar"&wt=ruby&fq=type:Post&rows=30}
hits=1 status=0 QTime=7
Run Code Online (Sandbox Code Playgroud)
匹配的子字符串包含在 https://github.com/sunspot/sunspot/wiki/Matching-substrings-in-fulltext-search中
更改默认运算符(AND/OR)可以通过添加选项minimum_match 1来完成,如http://blog.tonycode.com/archives/192中所述.