1

在我的模型里面我searchable有 index time added_at

search搜索块中,我添加with(:added_at, nil)了重新索引,现在在search对象内部我有:

<Sunspot::Search:{:fq=>["-added_at_d:[* TO *]"]...}>

这个 [* TO *] 是什么意思?出问题了?

4

1 回答 1

2

通过添加with(:added_at, nil)您将搜索结果缩小到在字段added_at中没有值的文档,因此我们可以预期相应的查询过滤器被定义为:

fq=>["added_at_d:null"] # not valid

问题是 Solr 标准查询解析器不支持在字段中搜索空/空值。在这种情况下,过滤器需要被否定(排除在字段中具有任何值的文档),以便查询保持有效。

运算符-可用于排除字段,通配符*可用于匹配任何值,现在我们可以预期查询过滤器如下所示:

fq=>["-added_at_d:*"] 

但是,尽管上述内容对查询解析器有效,但在否定子查询中使用通配符时,应首选使用范围查询以防止出现不一致的行为。

范围查询允许匹配其字段值在范围查询指定的下限和上限之间的文档。范围查询可以包括或不包括上限和下限。

A*可用于任一端点或两个端点以指定开放式范围查询。

最终这个过滤器没有任何问题,最终看起来像:

fq=>["-added_at_d:[* TO *]"]

参看。Lucene Range Queries , Solr 标准查询解析器

于 2016-10-07T14:34:04.780 回答