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