如何查询 SOLR 的空字段?

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

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

我试过这些查询,但都没有用:

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

有办法查询空字段吗?

谢谢

127632 次浏览

试试这个:

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

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

如果您正在使用 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 ()覆盖,看看是否为真

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

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

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

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

你也可以像这样使用它。

fq=!id:['' TO *]

你可以用过滤查询来做 Q = * : * & fq =-id: *

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

-myfield:*

但你必须使用

(*:* NOT myfield:*)

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

这里添加了一个注释,为了首先使字段可搜索,它需要 SOLR 模式中的字段类型设置为“ indexed = true”。然后可以使用“ field_name:*”表示字符串类型,使用“ field_name:[* TO *]”表示数字类型。