如何查询空字段的SOLR?

我有一个大的solr索引,我注意到有些字段没有正确更新(索引是dynamic的)。

这导致了一些字段有一个空的“ID”字段。

我已经尝试了这些查询,但他们没有工作:

id:'' id:NULL id:null id:"" id: id:['' TO *] 

有没有办法查询空字段?

谢谢

尝试这个:

 ?q=-id:["" TO *] 

根据SolrQuerySyntax ,你可以使用q=-id:[* TO *]

一个警告! 如果你想通过OR或AND来编写,你不能以这种forms使用它:

 -myfield:* 

但你必须使用

 (*:* NOT myfield:*) 

这种forms是完美的可组合的。 显然SOLR会将第一种forms扩展到第二种,但只有当它是顶级节点时。 希望这可以节省您一些时间!

如果你有一个大的索引,你应该使用默认值

  <field ... default="EMPTY" /> 

然后查询这个默认值。 这比q = -id更有效率:[“”TO *]

如果您使用的是SolrSharp,则不支持否定查询。

你需要改变QueryParameter.cs(创build一个新的参数)

 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; } } 

并且在QueryParameterCollection.cs类中,ToString()覆盖,看看否定参数是否为真

 arQ[x] = (qp.NegativeQuery ? "-(" : "(") + qp.ToString() + ")" + (qp.Boost != 1 ? "^" + qp.Boost.ToString() : ""); 

当你调用参数创build者,如果它是一个负值。 简单的改变属性

 List<QueryParameter> QueryParameters = new List<QueryParameter>(); QueryParameters.Add(new QueryParameter("PartnerList", "[* TO *]", ParameterJoin.AND, true)); 

你也可以像这样使用它。

 fq=!id:['' TO *] 

你可以用filter查询来完成q = *:*&fq = -id:*