如何查询SOLR空字段?

时间:2010-11-21 15:22:09

标签: solr lucene

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

这导致某些字段具有空的“id”字段。

我尝试了这些查询,但它们无效:

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

有没有办法查询空字段?

由于

7 个答案:

答案 0 :(得分:131)

试试这个:

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

答案 1 :(得分:71)

一个警告!如果您想通过OR或AND撰写,则不能以此形式使用它:

-myfield:*

但你必须使用

(*:* NOT myfield:*)

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

答案 2 :(得分:69)

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

答案 3 :(得分:10)

如果索引较大,则应使用默认值

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

然后查询此默认值。 这比q = -id:[“”TO *]

更有效

答案 4 :(得分:2)

您也可以像这样使用它。

fq=!id:['' TO *]

答案 5 :(得分:1)

如果您使用的是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));

答案 6 :(得分:1)

你可以用过滤查询来做到这一点 Q = *:*&安培; FQ = -id:*