ruby-on-rails - Sunspot:如何对具有不同值的多个字段进行全文查询?

标签 ruby-on-rails ruby solr full-text-search sunspot

我想用 sunspot 重现以下原始 solr 查询

q=exact_term_text:foo OR term_textv:foo* OR alternate_text:bar*

但我无法通过标准的太阳黑子界面理解这是否可能以及如何实现,因为看起来:

  1. fulltext方法似乎不接受多个文本/搜索字段参数
  2. 我不知道将什么参数作为第一个参数传递给fulltext ,就好像我通过了 "foo""bar"结果不匹配
  3. 如果我传递一个空参数,我得到一个 q=*:*
  4. 范围过滤器(例如 with(:term).starting_with('foo*')(顾名思义)作为过滤器查询应用,因此不参与评分。

似乎可以手动编写字符串(或者可能使用 adjust_solr_params ),但这看起来很老套。有更好的解决方案吗?

最佳答案

在 Sunspot 2.0.0 中,有一些未记录且不受支持的行为确实有效。作者本人建议不应该这样做,而且在未来的版本中也可能不会。

您可以将多个全文调用传递到搜索定义中

Post.search do
    fulltext "foo", {:fields => :exact_term}
    fulltext "bar", {:fields => :alternate}
end

这导致(来自日志)的 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 

匹配子串包含在 https://github.com/sunspot/sunspot/wiki/Matching-substrings-in-fulltext-search

可以通过添加选项来更改默认运算符 (AND/OR) 最小匹配 1 如 http://blog.tonycode.com/archives/192 中所述

关于ruby-on-rails - Sunspot:如何对具有不同值的多个字段进行全文查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359900/

相关文章:

java - 如何从solr中选择使用java?

ruby-on-rails - link_to_function 和 jquery 在 rails 3.1.0 中不能一起工作

ruby-on-rails - 具有基于 Web 的 UI/API 的 FTP 客户端/服务器

ruby - 为什么我不能从 ruby​​ 中的类方法中调用 include?

ruby-on-rails - 使用 Heroku 显示存储在 Amazon S3 上的图像

solr - 如何在 Apache Solr 中使用首字母缩略词?

java - java中如何调用solr分析api?

ruby-on-rails - 有没有一种方法可以设置查询的分数范围(或最高分数)

jquery - Rails 使用旧版本的 jquery

php - 如何将 php crypt 函数(SHA512)转换为 ruby​​?