Answers:
试试这个:
?q=-id:["" TO *]
?q=-id:*
得到Cannot parse '-q:*': '*' or '?' not allowed as first character in WildcardQuery
?q=-id:*
似乎按预期工作。解析错误可能与此问题有关。
Lucene Specification Version: 3.2.0
我正在使用。很高兴他们在Solr 4.5.1中添加了语法。
一个警告!如果要通过“或”或“与”组合,则不能以这种形式使用它:
-myfield:*
但是你必须使用
(*:* NOT myfield:*)
这种形式是完全可组合的。显然,SOLR会将第一种形式扩展到第二种形式,但前提是它是顶级节点。希望这可以节省您一些时间!
如果您使用的是SolrSharp,则它不支持否定查询。
您需要更改QueryParameter.cs(创建一个新参数)
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()覆盖将查看Negative参数是否为true
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));