雪貂/acts_as_ferret:指定字段应为空



这与基于lucene的搜索引擎Ferret有关。https://github.com/dbalmain/ferret

假设我有一个有两个字段的模型,myfield1myfield2。我想得到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)"

谢谢,Max

顺便说一句,如果相关的话,我在ruby on rails中使用acts_as_ferret,但我认为我的问题实际上只是与一个搜索字符串有关。我用的是雪貂宝石,v=0.1.6

编辑:下面有点脏的感觉解决方案,仍然想知道是否有可能只使用上面的查询字符串。

好吧,我通过添加一个新方法"myfield_blank"来解决这个问题:

def myfield_blank
  myfield_blank?.to_s
end

然后将CCD_ 5添加到我的acts_。所以现在我可以说

"myfield:foo || (myfield_blank:true && myfield2:foo)" 

这是可行的,但正如我所说,我仍然想知道我是否可以在查询中这样做,而不生成新的字段:如果我想对很多不同的字段这样做,这种方法将是不可接受的。感谢

根据源?*应该匹配任何非空字符串,所以你可以尝试这样做:

'myfield:"foo" || (-myfield:"?*" && myfield2:"foo")'

而且我真的不明白为什么'myfield:"foo" || (myfield:"" && myfield2:"foo")'不应该工作,但你可能已经尝试过了…

最新更新