如何查询空字段的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:*