Solr和Rails:[* TO *]值而不是nil(星号TO星号)

时间:2016-10-07 08:43:22

标签: ruby-on-rails ruby solr solr-query-syntax

searchable块的模型中,我有索引time added_at

search区块进行搜索时,我添加了with(:added_at, nil),制作了重新索引,现在我在search对象内:

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

这[* TO *]的含义是什么?出了什么问题?

1 个答案:

答案 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 *]"]

比照Lucene Range QueriesSolr Standard Query Parser