gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:44 29 4
gpt4 key购买 nike

我想用 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com