我有一个庞大的solr索引,注意到某些字段没有正确更新(该索引是动态的)。
这导致一些字段的"id"字段为空。
我尝试了以下查询,但它们没有起作用:
id:''
id:NULL
id:null
id:""
id:
id:['' TO *]
有没有一种方法可以查询空字段?谢谢
试试这个:
?q=-id:["" TO *]
一个警告!如果你想通过OR或AND组成它,你不能使用这个形式:
-myfield:*
但是必须使用
(*:* NOT myfield:*)
这个表单完全可以组合。显然,SOLR会将第一个表单扩展到第二个表单,但仅当它是顶级节点时。希望这能为您节省一些时间!
fq
,其中 q = *:*
。另请注意,您显然无法针对非索引/仅存储字段执行此检查,这让我有点困惑。 - markson edwardsonq=-id:[* TO *]
。如果你有一个很大的索引,你应该使用默认值
<field ... default="EMPTY" />
然后查询此默认值。这比q=-id:["" TO *]更有效。
fq=!id:['' TO *]
在这里添加一条注释,为了使字段可以被搜索,需要在 SOLR 模式中将字段类型设置为 "indexed = true"。然后您可以使用 "field_name:*
" 来搜索字符串类型,使用 "field_name:[* TO *]
" 来搜索数字类型。
private bool _negativeQuery = false;
public QueryParameter(string field, string value, ParameterJoin parameterJoin = ParameterJoin.AND, bool negativeQuery = false)
{
this._field = field;
this._value = value.Trim();
this._parameterJoin = parameterJoin;
this._negativeQuery = negativeQuery;
}
public bool NegativeQuery
{
get { return _negativeQuery; }
set { _negativeQuery = value; }
}
arQ[x] = (qp.NegativeQuery ? "-(" : "(") + qp.ToString() + ")" + (qp.Boost != 1 ? "^" + qp.Boost.ToString() : "");
当您调用参数创建器时,如果它是负值,请简单地更改属性。
List<QueryParameter> QueryParameters = new List<QueryParameter>();
QueryParameters.Add(new QueryParameter("PartnerList", "[* TO *]", ParameterJoin.AND, true));
?q=-id:*
,你会得到Cannot parse '-q:*': '*' or '?' not allowed as first character in WildcardQuery
的错误提示。 - Yzmir Ramirez?q=-id:*
似乎按预期工作。也许解析错误与这个问题有关。 - user2043553Lucene规范版本:3.2.0
。很高兴Solr 4.5.1中添加了这个语法。 - Yzmir Ramirez