在searchable
块的模型中,我有索引time added_at
。
在search
区块进行搜索时,我添加了with(:added_at, nil)
,制作了重新索引,现在我在search
对象内:
<Sunspot::Search:{:fq=>["-added_at_d:[* TO *]"]...}>
这[* TO *]的含义是什么?出了什么问题?
答案 0 :(得分:1)
通过添加with(:added_at, nil)
,您可以将搜索结果缩小到 added_at 字段中没有值的文档,因此我们可以将相应的查询过滤器定义为:
fq=>["added_at_d:null"] # not valid
问题是Solr Standard Query Parser不支持在字段中搜索空/空值。在这种情况下,需要取消过滤器(排除在字段中具有任何值的文档),以便查询保持有效。
运算符-
可用于排除字段,通配符*
可用于匹配任何值,现在我们可以期望查询过滤器看起来像:
fq=>["-added_at_d:*"]
但是,虽然上述内容对查询解析器有效,但在使用负子查询中的通配符时,应首选使用范围查询以防止出现不一致的行为。
范围查询允许匹配字段值为的文档 在Range Query指定的下限和上限之间。范围 查询可以是包含的,也可以不包括上限和下限。
*
可用于任一端点或两个端点,以指定开放式范围查询。
此过滤器最终看起来没有任何问题:
fq=>["-added_at_d:[* TO *]"]