这与基于 lucene 的搜索引擎 Ferret 有关。 https://github.com/dbalmain/ferret
假设我有一个包含两个字段的模型,myfield1
并且myfield2
. 我想获取 myfield 等于“foo”的记录,或者 myfield 具有null
(或空字符串)但 myfield2 设置为“foo”的记录。
我不想获取具有例如 myfield = "bar" 和 myfield2 = "foo" 的记录。所以,这并不像说“myfield:foo || myfield2: foo”那么简单——如果 myfield 为空,我只想查看 myfield2。
等效的 sql 是where (myfield = 'foo') or ((myfield is null or myfield = '') and myfield2 = 'foo')
. 与此等效的雪貂搜索字符串是什么?
以下不起作用,但它是我所追求的那种事情的一个例子:
"myfield:foo || (myfield:<blank> && myfield2:foo)"
谢谢,马克斯
顺便说一句,如果它是相关的,我在 Rails 上的 ruby 中使用acts_as_ferret,但我认为我的问题真的只是与雪貂搜索字符串有关。我正在使用雪貂宝石,v=0.11.6
编辑:下面有点肮脏的解决方案,仍然想知道是否可以仅使用上面的查询字符串。
好的,我通过添加一个新方法“myfield_blank”解决了这个问题:
def myfield_blank
myfield_blank?.to_s
end
然后添加myfield_blank => {},
到我的acts_as_ferret 索引定义中。所以现在我可以说
"myfield:foo || (myfield_blank:true && myfield2:foo)"
这行得通,但是就像我说的那样,我仍然想知道是否可以在查询中执行此操作,而无需创建新字段:如果我想为许多不同的字段执行此方法,则这种方法将是不可接受的。谢谢